如何解决字符串函数在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!\');
-> \'H\\xDD!\' (\'Hİ!\' in ISO-8859-9)
在最坏的情况下,您可能必须提供自己的与语言环境无关的字符串处理。调用setlocale
恢复为C
或其他某种语言环境是一种解决方法,但是POSIX进程级语言环境模型确实不适用于现代客户端/服务器应用程序。
, PHP字符串函数将一个字节视为一个字符。在ASCII范围0-127
中就可以了。
要使用UTF-8安全处理多种语言,请使用mb_*()
函数,UTF-8库或直到PHP6发行到2030年。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。