【发布时间】:2014-04-10 16:44:20
【问题描述】:
根据http://php.net/htmlspecialchars,字符集参数的默认值在 PHP 5.4 中从 ISO-8859-1 更改为 UTF8。
如果您在此处关注此错误https://bugs.php.net/bug.php?id=61354 的讨论,您很快就会意识到这会导致维护遗留 PHP 代码的重大困难。我们也遇到过类似的问题。
http://nikic.github.io/2012/01/28/htmlspecialchars-improvements-in-PHP-5-4.html 这篇帖子中的“大多数人使用 UTF-8”之类的解释真的很奇怪。
据我所知,htmlspecialchars() 引用了 UTF8 中的所有内容,即使设置了 ISO-8859-1。使用非 ASCII 字符集的人必须设置参数...好的,但他们也不会受到更改默认行为的影响。我写了很多 UTF-8 代码,之前使用 ISO-8859-1 的 htmlspecialchars() 从来没有遇到过问题。
那么为什么要改变这种行为呢?还是我忽略了一些安全问题?我只是想了解它(无需代码解决方案!)。
【问题讨论】:
-
不知道真正的原因是什么,但我猜这是为了未来的兼容性,当时 unicode 统治着世界,而 iso8859 之类的东西只是一场遥远的噩梦。
-
未来的考虑将是一个有效的论点,恕我直言。如果我能决定的话,我会尽快摆脱旧的 ISO-8859-1 代码。
-
PHP 5.4 中的更改只是在您未指定字符集时从 ISO-8859-1 切换到 UTF8。这似乎是一个配置问题,而不是代码更改。
-
默认 Linux 内核在我使用过的每个系统中都使用 UTF-8。我欢迎这个改变!
-
这让我想起了 nl2br 在 XHTML 流行期间添加的向后不兼容的更改。
标签: php