PHP setlocale()不适用于ctype_alpha检查

PHP setlocale()不适用于ctype_alpha检查,php,ubuntu,character-encoding,locale,Php,Ubuntu,Character Encoding,Locale,我运行以下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).

我运行以下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>";
我希望在调用setlocale(LC_ALL,'de_de.utf8')之后,ctypeèalpha会接受文档中所写的像äöüß这样的德语字符:但事实并非如此。 我做错了什么


PHP版本为:5.3.10-1ubuntu3.8

没有文档记录,但是,由于您使用的是
utf8
版本的区域设置,如果您的文件编码也是UTF-8,则必须使用
utf8\u 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)

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

我尝试了您的建议,但:echo“接受utf8解码的德语字符:”。ctype_alpha(utf8äääß')。“

”;返回“接受utf8解码的德语字符?”:-(如果有任何问题,
utf8\u encode
就是您在这里想要的。但是您可能只想以正确的编码(UTF-8)保存源代码@Samy我尝试了其他文件编码,并相应地更新了我的答案。亲爱的downvoter:先自己尝试,然后再downvote。你的论点是什么?你有没有在同样的条件下尝试过我的答案?如果没有,为什么你会被否决?为什么你不能自己回答这个问题?:)@Pauloferitas我对你的答案投了赞成票,因为我认为这与不在utf8环境中工作的人有关。字符串中的
äüöß
是什么编码?换句话说,源代码文件保存为什么编码?
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)