【问题标题】:How to store and get exact characters in mysql db?如何在mysql db中存储和获取确切的字符?
【发布时间】:2013-05-16 00:06:53
【问题描述】:

带有特殊字符的内容,例如' " - 存储时被替换为像 这样的字符。但并非所有字符实例都更改为像 这样的字符。所以这有点奇怪,为什么它只影响一些角色而不是全部。

在网上和 SO 中阅读了一些文章后,我发现了 table collationcharset

  • 我正在使用 PHP MySQL
  • 我在存储和获取值时使用准备好的语句
  • 数据库表排序规则设置为utf8_unicode_ci
  • 我的页面是html5<meta charset="utf-8">

通过上述设置,我仍然得到黑色钻石。有什么帮助吗?我有点绝望。

编辑:

也许你们中的一些人将来会遇到完全相同的问题。您可能会在下面找到我的答案作为完全相同的解决方案。干杯!

【问题讨论】:

  • 数据库中的character setnames是否也设置为utf8?
  • @Waygood 啊,我没有检查过。我的主机在创建数据库时有自己的用户界面,它没有让我在创建数据库时选择char set。我现在去改一下,看看能不能解决问题。
  • 数据库中的数据看起来是否正确?
  • 然后在连接SET CHARACTER SET utf8; SET NAMES utf8; 后尝试运行以下查询并尝试使用元标记<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
  • @andyb 不,这是不正确的。当我使用 phpmyadmin 检查时,存储的数据也有黑色菱形。

标签: php mysql character-encoding collation


【解决方案1】:

我的页面是带有<meta charset="utf-8">的html5

无论metas 都没什么用。
页面字符集仅由Content-type HTTP 标头确定,必须包含正确的字符集。

也应该使用PDO的DSN中的$mysqli->set_charset('utf8')/;charset=utf8,但这似乎不是你的问题。

【讨论】:

  • 我尝试在我的代码上添加set_charset("utf8"),就像手册中的代码一样。仍然没有工作。当您在 HTTP 标头上说 Content-type 时。您的意思是在.htaccess 上添加AddDefaultCharset UTF-8
  • .htaccess 也是要走的路。但是它可以被 PHP 覆盖。无论如何,你要问的不是如何设置,而是如何查看实际设置的哪个。
  • 好的,所以我发现了问题。使用mb_detect_encoding($str) 设置为ASCII。所以谢谢你的提示。 1最后一个问题。如何将该设置永久更改为UTF-8$str = mb_convert_encoding($str, "UTF-8"); 会永久更改字符编码还是仅针对当前页面?
  • $str 的来源是什么?
  • 当然不是。它仅检测 $str 的字符集。要查看 HTTP 标头,您必须查看服务器发送的 HTTP 标头。或者至少看看浏览器设置了什么页面编码
【解决方案2】:

好吧,这篇文章已经发布了几个星期,但我发现我在这方面出了什么问题。

从正确设置为UTF-8 的数据库中存储和获取的值。问题是当我 echohtmlentities 时。

我的旧回声通过了:htmlentities($str, ENT_QUOTES); 它没有 'UTF-8'

新的回声通过:htmlentities($str, ENT_QUOTES, "UTF-8"); 成功了。

呃。几个角色的伤害。

感谢所有提供帮助的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-24
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多