htmlentities在所有方面与htmlspecialchars()完全相同,除了htmlentities()之外,所有具有HTML字符实体等价物的字符都被翻译成这些实体。
听起来像是我想要的人。
然后this question告诉我需要“UTF-8”参数来摆脱这个错误:
Invalid multibyte sequence in argument
所以,这是我的编码包装函数(用于规范不同PHP版本的行为)
function html_entities ($s)
{
return htmlentities ($s, ENT_COMPAT /* ENT_HTML401 */, "UTF-8");
}
我仍然收到“参数中的多字节序列”错误。
这是一个触发错误的示例字符串,它是十六进制编码:
JigueàBaptiste
4a 69 67 75 65 20 e0 20 - 42 61 70 74 69 73 74 65
我注意到à编码为0xe0,但编码为单字节,高于0x80。
我做错了什么?
答案 0 :(得分:2)
您的字符串以ISO-8859-1编码,而不是UTF-8。简单明了。
function html_entities ($s)
{
return htmlentities ($s, ENT_COMPAT /* ENT_HTML401 */, "ISO-8859-1");
^^^^^^^^^^^^
}
答案 1 :(得分:1)
如果将à
编码为0xE0
,则表示您未将文件保存为UTF-8编码。 0xE0
是无效的UTF-8。它应该是0xC3 0xA0
以UTF-8编码保存文件。另请参阅UTF-8 all the way through
如果您在utf-8中正确保存,则十六进制应如下所示:
4A 69 67 75 65 20 C3 A0 20 42 61 70 64 69 73 74 65
J i g u e à B a p t i s t e