某些PHP string functions(如strtoupper等)依赖于语言环境。但是,当我确实知道特定字符串仅由ASCII(0-127)字符组成时,仍然不清楚语言环境是否重要。我可以保证strtoupper('abc..xyz')
将始终独立于区域设置返回ABC..XYZ
。 PHP string functions在ASCII范围内的工作方式与区域设置无关吗?
虽然关于strtoupper
的答案对我来说很重要,但关于所有字符串函数库的问题更为一般。
我想确保用户选择的区域设置(在多语言网站上)不会破坏我的核心功能,这与国际化无关。
答案 0 :(得分:7)
不,我不敢。主要的反例是可怕的土耳其dotted-I:PHP字符串函数在ASCII范围内是否与locale无关?
setlocale(LC_CTYPE, "tr_TR");
echo strtoupper('hi!');
-> 'H\xDD!' ('Hİ!' in ISO-8859-9)
在最坏的情况下,您可能必须提供自己的与语言环境无关的字符串处理。调用setlocale
恢复为C
或其他一些语言环境是一种修复,但POSIX进程级语言环境模型非常适合现代客户端/服务器应用程序。
答案 1 :(得分:4)
PHP字符串函数将一个字节视为一个字符。在ASCII范围0-127
中没问题。
要使用UTF-8安全地处理多种语言,请使用mb_*()
函数,UTF-8库或等到PHP30发布时的2030。