UTF-8和ISO 8859-1编码在PHP

问题描述:

我试图转换所有的& nbsp;实例常规空格在PHP中:UTF-8和ISO 8859-1编码在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输入并显示它。所以<和&#60;都会变成<。

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

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

&nbsp;不是空格。它是ISO 8859-1中的字节160,在UTF-8中是\xc2\xa0。由于名称no breakable space意味着浏览器不会将其替换为换行符。

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

+0

' '是* a *空格字符,而不是*空格字符。 – dan04 2011-02-28 01:57:38

+0

@ dan04 - 它只是一个空格,如果呈现为html。正如Chris所回答的那样,Content-type头文件应该设置为html,以便浏览器将其呈现为空间。 – 2011-03-01 12:08:10

为什么不先发送标题?

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