【问题标题】:Ucfirst doesnt work on non-english characters [duplicate]ucfirst 不适用于非英文字符[重复]
【发布时间】:2014-09-08 17:33:52
【问题描述】:

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

echo ucfirst("çağla");

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

【问题讨论】:

标签: php ucfirst


【解决方案1】:

对于单个单词,正确的方法是:mb_convert_case 在第二个参数中使用 MB_CASE_TITLE。

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);

【讨论】:

    【解决方案2】:

    谢谢,我终于按照 Stony 的建议找到了这个工作函数。

    function myucfirst($str) {
        $fc = mb_strtoupper(mb_substr($str, 0, 1));
        return $fc.mb_substr($str, 1);
    }
    

    【讨论】:

      【解决方案3】:

      在较新的 PHP 版本中,PHP 在内部使用 UTF-8。因此,如果你有一个不是 UTF-8 的字符串,你会在一些函数中遇到问题,例如 htmlspecialchars。

      也许这里是同样的问题。您可以先尝试使用 utf8_encode 将字符串转换为 utf-8。

      我认为默认语言是 C。

      请注意,“字母”由当前语言环境决定。例如,在默认的“C”语言环境中,诸如变音符号-a (ä) 之类的字符将不会被转换。

      http://php.net/manual/de/function.ucfirst.php

      如果你向下滚动,你会得到一个转换它的函数。

      【讨论】:

        【解决方案4】:

        请尝试$string = mb_strtoupper($string[0]) . mb_substr($string, 1);

        【讨论】:

          【解决方案5】:

          我把它做成了单行线。

          function mb_ucfirst($str) {
            return mb_strtoupper(mb_substr($str, 0, 1)).mb_substr($str, 1, mb_strlen($str));
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多