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

标签 php string internationalization ascii locale

一些 PHP string functions (如 strtoupper 等)依赖于语言环境。但是当我确实知道特定字符串仅由 ASCII (0-127) 字符组成时,仍然不清楚语言环境是否重要。我可以保证 strtoupper('abc..xyz') 将始终独立于区域设置返回 ABC..XYZ 吗?做 PHP string functions在独立于区域设置的 ASCII 范围内工作相同?

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

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

最佳答案

Do PHP string functions work the same in ASCII range independent from locale?

不,恐怕不是。主要的反例是可怕的土耳其语 dotted-I :

setlocale(LC_CTYPE, "tr_TR");
echo strtoupper('hi!');

-> 'H\xDD!' ('Hİ!' in ISO-8859-9)

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

关于php - 字符串函数在 PHP 中是 ASCII 安全的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6181807/

相关文章:

java - 如何在 Android 中创建多语言枚举?

php - 包需要 : libcurl. so.3

php - 我正在使用“添加查询”创建 PHP OOP 连接

Python Discord bot - 关于消息分割和更改

python - 如何在python中连续打印右侧结果?

regex - Erlang中的字符串正则表达式匹配

ruby-on-rails-3 - 未在 Rails 3.1.3 中设置默认语言环境

oracle - 考虑到在数据库服务器上定义的NLS_NUMERIC_CHARACTERS,如何使用正确的TO_NUMBER()Oracle函数?

php - 如何在 PHP 中保存早于时间戳的日期

php - 在数据库表中有两个唯一 ID 是个坏主意吗?