字符串函数在PHP中是ASCII安全的吗



一些PHP字符串函数(如strtoupper等)依赖于语言环境。但是,当我真正知道特定字符串仅由ASCII(0-127)字符组成时,区域设置是否重要仍然不清楚。我可以保证strtoupper('abc..xyz')总是独立于区域设置返回ABC..XYZ吗。PHP字符串函数在ASCII范围内的工作方式是否与语言环境无关?

虽然关于strtoupper的答案对我来说很重要,但这个问题对所有字符串函数库来说更为普遍。

我想确保用户选择的区域设置(在多语言网站上)不会破坏我的核心功能,这与国际化无关。

PHP字符串函数在独立于区域设置的ASCII范围内工作是否相同?

不,恐怕不是。主要的反例是可怕的土耳其圆点I:

setlocale(LC_CTYPE, "tr_TR");
echo strtoupper('hi!');
-> 'HxDD!' ('Hİ!' in ISO-8859-9)

在最坏的情况下,您可能必须提供自己的独立于区域设置的字符串处理。调用setlocale以恢复到C或其他语言环境是一种修复方法,但POSIX进程级语言环境模型非常不适合现代客户端/服务器应用程序。

PHP字符串函数将一个字节视为一个字符。在ASCII范围0-127中,这很好。

要使用UTF-8安全地处理多种语言,请使用mb_*()函数、UTF-8库或等到2030年PHP6发布。

相关内容

  • 没有找到相关文章

最新更新