如果我们查看 PHP 中 htmlspecialchars()
$encoding
参数来指定输入字符串的编码。
htmlspecialchars_decode()
函数也有一个 $encoding
参数。然而,事实并非如此.
我想知道为什么会这样。必须有一些原因不在
$encoding
中包含htmlspecialchars_decode()
参数。
令人惊讶的是,
$encoding
中有一个
html_entity_decode()
参数,那么将它包含在该函数中有什么意义。
我不得不在这里稍微猜测一下,但是......
htmlspecialchars_decode
只解码了一小部分字符,这些字符都是 ASCII 字符。因此,无需指定要将这些字符解码为的 target 编码,因为它们在所有 ASCII 兼容编码中都是相同的。现在,如果您想解码为非 ASCII 兼容编码怎么办?这可能实际上从来不是这种情况,如果你真的需要的话,你可以简单地在之前和/或之后进行一些编码转换。
PHP 总是假定 ASCII 用于对它重要的事情,而任意字节用于任何其他无关紧要的东西,所以这个函数从来没有得到任何统一的编码支持,就像许多其他函数也没有一样。
函数
htmlspecialchars
和 html_entity_decode
在某些时候已经接受了这种处理,因为编码 do 很重要的情况可能更经常地遇到它们。在 html_entity_decode
的情况下,它可以解码更广泛的字符,并且将这些 解码为 的编码很重要。
对于
htmlspecialchars
,只有当你将非 ASCII 兼容的字符串放入它时(与它的 _decode
对应物相同的罕见情况),并且如果你会问为什么它支持编码而 _decode
确实如此不,好吧……一致的 PHP API 设计。 🤷u200d♂️