Php 什么设置语言环境(LC#CTYPE,';C';);真的吗?

Php 什么设置语言环境(LC#CTYPE,';C';);真的吗?,php,utf-8,ctype,setlocale,Php,Utf 8,Ctype,Setlocale,当我的PHP脚本使用UTF-8编码并使用非ASCII字符运行时,一些PHP函数,如strtolower()无法工作 我可以使用mb_strtolower,但是这个脚本可以在各种不同的平台和配置上运行,并且多字节字符串扩展可能不可用。我可以在使用之前检查该函数是否存在,但我的代码中到处都是字符串函数,因此我宁愿不替换每个实例 有人建议使用set\u locale(LC\u CTYPE,'C'),他说这会使字符串函数正常工作。这听起来不错,但我不想在不确切了解它在做什么的情况下引入这种变化。我以前使

当我的PHP脚本使用UTF-8编码并使用非ASCII字符运行时,一些PHP函数,如
strtolower()
无法工作

我可以使用mb_strtolower,但是这个脚本可以在各种不同的平台和配置上运行,并且多字节字符串扩展可能不可用。我可以在使用之前检查该函数是否存在,但我的代码中到处都是字符串函数,因此我宁愿不替换每个实例

有人建议使用
set\u locale(LC\u CTYPE,'C')
,他说这会使字符串函数正常工作。这听起来不错,但我不想在不确切了解它在做什么的情况下引入这种变化。我以前使用过set_locale来更改数字的格式,但是我以前没有使用过
LC_CTYPE
标志,我不太明白它的作用。值
'C'
是什么意思?

C
表示“使用硬编码的任何语言环境”(由于大多数*NIX程序都是用C编写的,因此称为
C
)。但是,它通常不是UTF-8语言环境


如果使用UTF-8等多字节字符集,则无法使用常规字符串函数-需要使用
mb
对应项。但是,几乎每个PHP安装都应该启用此扩展。

参考:(它没有解释
C
的功能,不是RTFM,只是为了完整性)感谢您的解释-如果我让用户可以配置该值,这会起作用吗?用户可以在配置文件中输入他们的实际语言环境,然后我调用set_locale(LC_TYPE,$config_value);-这会否定使用mb_u函数的必要性吗?或者我仍然需要使用它们吗?你可以全局激活mb_*函数@如果powtac在不支持它的共享主机上,他就不会这样做。我无法控制它运行的环境-这是一个在野外的脚本!我认为多字节字符串函数重载在ini_集合中不起作用,所以我无法控制它。表示:“您不能依赖用户能够正确更改区域设置以满足您的应用程序需要-在共享主机上,他们可能无法更改与Apache一起运行的用户的区域设置。底线-对于打算“写一次,在任何地方运行”的应用程序,区域设置不是一种方式。”因此,我想我只需要进行搜索和替换,就可以在任何可能的地方使用mb_uu/