php - utf8 编码文本两次。会不会有什么负面影响?

标签 php mysql utf-8 character-encoding

<分区>

MySQL 数据库返回 utf8 编码的文本。基本上,我使用了 PDO 属性 MYSQL_ATTR_INIT_COMMAND 并通过了:

SET CHARACTER SET utf8

它返回 utf8 编码的文本。但是数据库中的一些文本是纯 utf8,像 &alum; 这样的文本会按原样返回。

所以我需要在 php 中再次调用 utf8_encode 来获取实际的 utf8 字符。它工作正常。

我想知道,它是否会对文本编码两次产生任何负面影响,或者除了像上面那样对非编码文本进行编码之外,它不会影响任何其他内容?

谢谢!

编辑:

我正在使用以下代码来获取正确的字符:

 $val = utf8_encode(addslashes(html_entity_decode(strip_tags($val))));

所以它所做的是将以下文本从:

<font color=\"#222222\" face=\"arial, sans-serif\" size=\"2\"> Test Event  &nbsp; &nbsp;</font><span style=\"color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 13px;\">Pers&ouml;nlichkeit Universit&auml;t&quot;</span>

(此文本来自数据库,调用SET CHARACTER SET utf8后)

到:

Test Event Persönlichkeit Universität\"

最佳答案

ä 是一个 html 实体,可能一开始就不应该进入您的数据库。它与 UTF-8 无关。

如果您在 "ä" 上调用 utf8_encode,则不会发生任何事情,因为 ISO-8859-1 和 UTF-8 的编码相同。您将在浏览器中看到它代表的字符,因为它被解释为 html。

作为普通的网络应用程序开发人员,您永远不应该调用 utf8_encode。您实际上不需要 ISO-8859-1 到 UTF-8 的转换,首先是因为浏览器和 MySQL 不支持它。它们将 Latin1 和 ISO-8859-1 别名为 Windows-1252 以实现兼容性。其次,您可以使浏览器和数据库以 UTF-8 格式发送它们的数据,因此它已经是 UTF-8 并且不需要转换。

您也不应该转换为 html 实体 - 这是不必要的,因为 UTF-8 可以表示所有字符。

数据库中的数据不应该与 html 有任何关系 - 那里的数据应该是规范权威的数据表示。现在人们对数据实际上是 ä 还是 ä 感到困惑,这会导致如下问题:

enter image description here

图片来自TheDailyWTF

关于php - utf8 编码文本两次。会不会有什么负面影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16088324/

相关文章:

javascript - 如何在我的 php 语句中正确执行此 javascript?

MySql:复合唯一键

php - 中文字符问题,PHP Web 服务

java - 如何将 UTF 字符串转换为 ANSI 并使用 JAVA-ANDROID 在 ExternalSD 中创建 ANSI 文本文件

c++ - 在 Boost Spirit 中解码字符 UTF8 转义

php - Mysql时间的正确格式

php - 从选定的下拉列表中保存元框数据

mysql - 如何加入 ON IN ALL 关系

php - TwitterOAuth 商店 token 供离线使用

php - 你把 beginTransaction();在 `try` block 之前或之内