【问题标题】:Accented characters stored in MySQL database存储在 MySQL 数据库中的重音字符
【发布时间】:2011-01-04 09:50:16
【问题描述】:

我有一个 web 应用程序,它在 MySQL 数据库中存储法语文本(可能包括重音字符)。当通过 PHP 直接检索数据时,重音字符会变成乱码。例如:qui r�fl�te la liste.

因此,我使用 htmlentities() (或 htmlspecialchars() )将字符串转换为 html 实体,一切都很好。但是,当我输出包含重音字符和 HTML 元素的数据时,事情变得更加复杂。例如,<strong> 被转换为 <strong>,因此浏览器无法识别。

如何同时正确显示重音字符并正确解析我的 HTML?

谢谢!

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您可以将包含重音字符的数据库字段的排序规则设置为 utf8_general_ci 以支持它们。

    最终你也可以设置数据库的排序规则,所以所有字段都是默认设置的。

    【讨论】:

      【解决方案2】:

      您应该使用 UTF-8 编码将数据存储在数据库中 - 然后一切都会按预期工作,并且不需要 htmlentities()

      确保所有方面都是 utf-8 - 数据库、表编码和排序规则,以及客户端和服务器端的连接。即使不是所有内容都是 utf-8,也可能会起作用,但是当您进行备份和恢复时可能会严重失败 - 这就是我全面推荐 utf-8 的原因。

      【讨论】:

      • +1 看到这个 SO 答案:stackoverflow.com/questions/1344692/… 的检查清单。
      • @martin Clayton,感谢您的链接。清单上的所有内容都受到尊重......此外,数据以 UTF-8 正确存储在数据库中(即,当我直接查询数据库时没有奇怪的字符)。关于可能导致问题的任何想法? (此外,在不使用 html 实体的情况下,在 HTML 中正确显示硬编码的重音字符)
      • 根据 OcuS 的建议,我使用了 utf8_encode() 并且一切正常。总之,还是很吸引人的。谢谢你们的帮助!
      • 请注意,如果您已经将数据写入您的数据库,但编码设置错误,则它已经损坏,并且将来对编码的修改将无济于事。它需要一个相当复杂的“mysqldump”和恢复来修复格式错误的数据。
      • 我已经仔细检查了我的 PHP 代码和 MySql 设置,最后唯一有帮助的是在连接到数据库时指定编码:new PDO('mysql:host=yourserver;dbname=yourdb;charset=UTF8', 'dbuser', 'password');
      【解决方案3】:

      也许你可以看看utf8_encode()utf8_decode()

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      相关资源
      最近更新 更多