1

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

SET CHARACTER SET utf8

它返回utf8编码文本。但是数据库中的一些文本是普通的utf8,类似的东西&alum;是按原样返回的。

所以我需要utf8_encode在 php 中再次调用以获取实际的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\"
4

1 回答 1

2

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

如果你调用utf8_encode什么"&auml;"都不会发生,因为 ISO-8859-1 和 UTF-8 的编码是相同的。您将在浏览器中看到它所代表的字符,因为它被解释为 html。

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

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

数据库中的数据不应该与 html 有任何关系——那里的数据应该是数据的规范权威原样表示。现在,数据是否真的是字面意思&auml;还是ä会导致这样的问题存在混淆:

在此处输入图像描述

图片来自TheDailyWTF

于 2013-04-18T16:39:35.660 回答