首页 文章

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

提问于
浏览
2

我想转换所有 实例到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输入并显示它 . 所以<和<都会变成< .

3 回答

  • 3

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

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

  • 0

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

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

  • 1

    为什么不先发送 Headers ?

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

相关问题