我正在尝试将字符串中的第一个字母大写。它适用于英文字母,但不幸的是,它不适用于非英文字符,例如
echo ucfirst("çağla");
使 ucfirst 在包括非英语字符在内的所有单词上正常工作的正确方法是什么?
对于一个单词,正确的做法是:mb_convert_case
with MB_CASE_TITLE
in second argument。
mb_internal_encoding('UTF-8');
echo mb_convert_case('çağla', MB_CASE_TITLE);
因为它取决于字符集和语言环境:一些语言区分大写和标题。在这里,titlecasing 更合适。
一个例子:二字字符 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);
谢谢,我终于找到了这个工作功能作为石的建议。
function myucfirst($str) {
$fc = mb_strtoupper(mb_substr($str, 0, 1));
return $fc.mb_substr($str, 1);
}
在较新的 PHP 版本中,PHP 在内部使用 UTF-8。因此,如果您有一个不是 UTF-8 的字符串,您会在某些函数(例如htmlspecialchars )中遇到问题。
也许这是同样的问题。您可以先尝试使用utf8_encode将字符串转换为 utf-8 。
我认为默认语言是C。
请注意,“字母”由当前语言环境决定。例如,在默认的“C”语言环境中,诸如变音符号-a (ä) 之类的字符将不会被转换。
http://php.net/manual/de/function.ucfirst.php
如果向下滚动,您将获得一个转换它的功能。
请试试 $string = mb_strtoupper($string[0]) . mb_substr($string, 1);
我把它做成了单线器。
function mb_ucfirst($str) {
return mb_strtoupper(mb_substr($str, 0, 1)).mb_substr($str, 1, mb_strlen($str));
}