2011-03-08 74 views
9

当我的PHP脚本以UTF-8编码运行时,使用非ascii字符,一些PHP函数(如strtolower())不起作用。我可以使用mb_strtolower,但是此脚本可以在各种不同的平台和配置上运行,并且多字节字符串扩展可能不可用。我可以在使用前检查函数是否存在,但是我的代码中散布了字符串函数,并且不会替换每个实例。什么是set_locale(LC_CTYPE,'C');实际上呢?

有人建议使用set_locale(LC_CTYPE, 'C'),他说这会导致字符串函数正常工作。这听起来很好,但我不想在不明白它在做什么的情况下引入这些变化。我以前使用过set_locale来改变数字的格式,但是我之前没有使用过LC_CTYPE的标志,我真的不明白它的作用。 'C'的值是什么意思?谢谢!

+3

参考:http://php.net/manual/en/function.setlocale.php(它不能解释'C'的作用,并不意味着RTFM,只是为了完整性) – 2011-03-08 11:13:37

回答

8

C的意思是“使用任何区域硬编码”(并且因为大多数* NIX程序是用C编写的,所以它被称为C)。但是,它通常不是UTF8语言环境。

如果您使用UTF8等多字节字符集,则您的不能使用使用常规字符串函数 - 使用mb_对应项是必需的。但是,几乎每个PHP安装都应该启用此扩展。

+0

感谢解释 - 如果我使用户可以配置该值,那么可以工作吗?例如。用户可以在配置文件中输入他们的实际语言环境,然后我调用set_locale(LC_TYPE,$ config_value); - 是否会否定使用mb_函数的需要?或者仍然需要使用它们? – Russ 2011-03-08 11:20:30

+0

您可以全局激活mb_ *函数! – powtac 2011-03-08 11:22:18

+0

@powtac如果他在不支持它的共享主机上,请不要使用它。 – 2011-03-08 11:26:56

相关问题