Ucfirst不适用于非英语角色

时间:2014-09-08 17:33:52

标签: php ucfirst

我正在尝试在字符串中将第一个字母设为大写。它适用于英文字母,但不幸的是,它不适用于非英语字符,例如

echo ucfirst("çağla");

在包括非英语字符在内的所有单词上正确使用ucfirst的正确方法是什么?

5 个答案:

答案 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));
}