PHP中的UTF-8和ISO 8859-1编码

时间:2011-02-27 23:59:43

标签: php unicode utf-8

我正在尝试转换所有& nbsp;实例到PHP中的常规空格:

echo '<meta charset="UTF-8" /> ';
echo html_entity_decode('&nbsp;');
echo html_entity_decode('&nbsp;', ENT_COMPAT, 'UTF-8');

如果第一行被注释掉,那么输出将在ISO 8859-1中并读作:

 Â

前面有空间的地方。如果指定了UTF-8编码,则显示为:

这是一个未定义的UTF-8字符,后跟一个空格。无论如何,确保所有HTML实体空间都被正确解码而不管编码?

空格字符实际上只是一个例子,我想要做的是从未指定的字符集中读取html输入并显示它。所以&lt;和&amp;#60;会变成&lt;。

3 个答案:

答案 0 :(得分:3)

&nbsp;不是空格。它是ISO 8859-1中的字节160,而在UTF-8中是\xc2\xa0。正如名称no breakable space暗示浏览器不会替换换行符。

如果你想要一个空间,你将不得不用空格替换它。

答案 1 :(得分:1)

这是编码问题。它们不兼容。您必须在html_entity_decode中为每个编码使用不同的选项。但是,您可以先将输入转换为utf-8(iconv),然后再使用html_entity_decode($string, ENT_COMPAT, 'UTF-8')

如果你不知道输入的编码,你必须猜测。

答案 2 :(得分:0)

为什么不先发送标题?

header("Content-type: text/html; charset=utf-8");
echo html_entity_decode("&nbsp;", ENT_COMPAT, 'UTF-8');