4

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

echo ucfirst("çağla");

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

4

5 回答 5

7

对于一个单词,正确的做法是:mb_convert_casewith MB_CASE_TITLEin 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);
于 2014-09-08T17:47:40.990 回答
4

谢谢,我终于找到了这个工作功能作为石的建议。

function myucfirst($str) {
    $fc = mb_strtoupper(mb_substr($str, 0, 1));
    return $fc.mb_substr($str, 1);
}
于 2014-09-08T17:42:35.757 回答
2

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

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

我认为默认语言是C

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

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

如果向下滚动,您将获得一个转换它的功能。

于 2014-09-08T17:37:40.183 回答
1

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

于 2014-09-08T17:40:13.170 回答
1

我把它做成了单线器。

function mb_ucfirst($str) {
  return mb_strtoupper(mb_substr($str, 0, 1)).mb_substr($str, 1, mb_strlen($str));
}
于 2019-02-28T09:15:11.790 回答