PHP htmlspecialchars函数中的Unicode替换字符


Unicode Replacement Characters in the PHP htmlspecialchars function

在htmlspecialchars函数中,如果设置了ENT_SUBSTITUTE标志,则应该替换一些无效字符。

要替换哪些字符?无效字符和用来替换它的字符之间的映射是什么?

只有一个通用的替换字符:U+FFFD。如果您要输出UTF-8,那么这个码点是正确编码的。如果不是,则得到相应的字符引用�

没有可逆映射。根据定义,原始字节序列无效,即没有值(valid =有值)。

被替换的字节(不是真正的"字符")是那些在假定的源编码中无效的字节。例如,如果源编码是UTF-16,并且只有一个代理,那么这将是"无效的"(尽管从技术上讲,在这种情况下,任何文本处理程序都应该致命地中止)。举个更好的例子,如果源编码是ASCII,那么大于127的任何值都是无效字符。