我正在尝试在字符串中将第一个字母设为大写。它适用于英文字母,但不幸的是,它不适用于非英语字符,例如
echo ucfirst("çağla");
在包括非英语字符在内的所有单词上正确使用ucfirst的正确方法是什么?
答案 0 :(得分:5)
对于单个单词,正确的方法是:mb_convert_case
在第二个参数中加MB_CASE_TITLE
。
mb_internal_encoding('UTF-8');
echo mb_convert_case('çağla', MB_CASE_TITLE);
因为它取决于charset和locale:某些语言区分大写和标题。在这里,选择更合适。
一个例子:digram字符dz。哪个变成DZ大写但Dz在标题中。这不是一回事。
注意:仅mb_convert_case
+ MB_CASE_TITLE
相当于ucwords。 ucfirst的严格等同于:
return mb_convert_case(mb_substr($str, 0, 1), MB_CASE_TITLE) . mb_substr($str, 1);
答案 1 :(得分:2)
在较新的PHP版本中,PHP在内部使用UTF-8。因此,如果您的字符串不是UTF-8,那么您可能会在某些函数中遇到问题,例如 htmlspecialchars 。
也许这是一个同样的问题。您可以尝试使用 utf8_encode 将字符串转换为utf-8。
我认为默认语言是 C 。
请注意,'alphabetic'由当前区域设置决定。例如,在默认的“C”语言环境中,如umlaut-a(ä)不会转换字符。
http://php.net/manual/de/function.ucfirst.php
如果向下滚动,则会获得转换它的功能。
答案 2 :(得分:2)
谢谢,我终于发现这个工作功能是Stony的建议。
function myucfirst($str) {
$fc = mb_strtoupper(mb_substr($str, 0, 1));
return $fc.mb_substr($str, 1);
}
答案 3 :(得分:1)
请尝试$string = mb_strtoupper($string[0]) . mb_substr($string, 1);
答案 4 :(得分:0)
我把它做成了单线纸。
function mb_ucfirst($str) {
return mb_strtoupper(mb_substr($str, 0, 1)).mb_substr($str, 1, mb_strlen($str));
}