UTF-8字符串的strtoupper PHP函数

33
我一直在阅读有关 strtoupper() PHP 函数的用户评论,似乎对于如何转换非英语字符串并没有共识。我的意思是,人们提供本地化的解决方案和其他东西,但是否应该有一种统一的方法将字符串转换为全部大写(或全部小写)字母呢?
因此,我的问题是,假设我有一个 UTF-8 编码的字符串(在某个未知的区域设置中),如何在 PHP 中将其转换为所有大/小写字母?
2个回答

72

你想要使用mb_strtoupper函数。

$str = "Τάχιστη αλώπηξ βαφής ψημένη γη, δρασκελίζει υπέρ νωθρού κυνός";
$str = mb_strtoupper($str, "UTF-8");
echo $str; // Prints ΤΆΧΙΣΤΗ ΑΛΏΠΗΞ ΒΑΦΉΣ ΨΗΜΈΝΗ ΓΗ, ΔΡΑΣΚΕΛΊΖΕΙ ΥΠΈΡ ΝΩΘΡΟΎ ΚΥΝΌΣ

PHP.net中提到:

相比于标准的大小写转换函数,如strtolower()和strtoupper(),本函数是根据Unicode字符属性执行的大小写折叠。因此,本函数的行为不受语言环境设置的影响,并且可以转换所有具有“字母”属性的字符,例如A-umlaut(Ä)。


0

你试过this吗?我不是语言学家,但我不会假设所有语言都有大小写分别。


1
至少不是每个字符都有大写字母。例如,ß 没有大写形式 :) - KingCrunch
每种语言都有各自的特点,那中文和阿拉伯语呢?在阿拉伯语中,每个字符有三个版本,但并非所有字符都有对应的三个版本。在希腊语中,有一个字母还有初始(也就是我们的大写)、正常和最终版本。 - rsk82
1
如果我们有时间清理一下,那就太好了。因为即使已经有更好的表述且被接受的答案提供了同样的函数建议(而且是早于这个回答几年的),还是会有人回答“你试过吗?”的问题。 - hakre

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接