PHP setlocale() 不起作用ctype_alpha检查


PHP setlocale() not working for ctype_alpha check

我运行这个php代码:

echo "<br>system locales: ".system('locale -a')."<br><br>";
echo "current locales: ".setlocale(LC_ALL, 0)."<br><br>";
var_dump(setlocale (LC_ALL, 'de_DE.utf8'));
echo "current locales: ".setlocale(LC_ALL, 0)."<br><br>";
echo "accepting german characters?: ".ctype_alpha("äüöß")."<br><br>";
echo "accepting characters in general?: ".ctype_alpha("test")."<br><br>";
echo "rejecting numbers?: ".ctype_alpha("tes2t")."<br><br>";

并获取此输出:

C C.UTF-8 POSIX de_DE.utf8
system locales: de_DE.utf8
current locales: C
string(10) "de_DE.utf8" current locales: de_DE.utf8
accepting german characters?:
accepting characters in general?: 1
rejecting numbers?

我预计在调用 setlocale(LC_ALL,'de_DE.utf8')之后,ctype_alpha会接受像 äöüß 这样的德语字符,如文档中所述:"如果文本中的每个字符都是来自当前语言环境的字母,则返回 TRUE,否则返回 FALSE。 但事实并非如此。我在这里做错了什么?

PHP 版本是 : 5.3.10-1ubuntu3.8

它没有记录,但是,由于您使用的是utf8版本的语言环境,如果您的文件编码也是 UTF-8,则必须使用 utf8_decode() 才能使其工作:

setlocale(LC_ALL, 'de_DE.utf8');
// Assuming your file encoding is also UTF-8
var_dump(ctype_alpha(utf8_decode('äüöß'))); // bool(true)
// Assuming your file encoding is anything else
var_dump(ctype_alpha('äüöß')); // bool(true)

在具有UTF-8,ISO-8859-1,KOI8-U和Windows 1252文件编码的OS X Mavericks机器上使用PHP 5.4.17-cli进行测试。