用于多字节字符编码的 ucfirst()函数

我已经问过 strtolower函数了。 但是当使用外来字符时,它不会将它们转换成大写字母,所以我必须使用:

 mb_strtolower($a,"utf8");

但是如果我想使用 ucfirst()函数,我能做什么呢?我还没有找到任何类似的函数,可以在其中设置编码类型。

64578 次浏览

正如你已经注意到的,它没有 mb_ucfirst功能。你可以用两个 mb_substr来伪造一个 mb_ucfirst:

function mb_ucfirst($string, $encoding)
{
$firstChar = mb_substr($string, 0, 1, $encoding);
$then = mb_substr($string, 1, null, $encoding);
return mb_strtoupper($firstChar, $encoding) . $then;
}

我在网页上使用 cp1250,对于我 mb _ ucfirst 不工作,所以很少升级:

  function mb_ucfirst($string)
{
$main_encoding = "cp1250";
$inner_encoding = "utf-8";
$string = iconv($main_encoding, $inner_encoding , $string );
$strlen = mb_strlen($string);
$firstChar = mb_substr($string, 0, 1, $inner_encoding);
$then = mb_substr($string, 1, $strlen - 1, $inner_encoding);
return $string = iconv($inner_encoding, $main_encoding , mb_strtoupper($firstChar, $inner_encoding) . $then );
}

这是一种更简洁的解决方案,尽管它与 ucwords函数非常相似:

$final_string = mb_convert_case($your_string, MB_CASE_TITLE, 'UTF-8');

如果你需要大写字符串组成一个字,这是最好的解决方案。

function mb_ucfirst($string)
{
return mb_strtoupper(mb_substr($string, 0, 1)).mb_substr($string, 1);
}
/*This worked correctly for me*/
function mb_ucfirst($string, $encoding='UTF-8')
{
$firstChar = mb_substr($string, 0, 1, $encoding);
$then = mb_substr($string, 1, mb_strlen($string, $encoding)-1, $encoding);
return mb_strtoupper($firstChar, $encoding) . $then;
}
if (!function_exists('mb_ucfirst'))
{
function mb_ucfirst($value)
{
return mb_strtoupper(mb_substr($value, 0, 1)) . mb_substr($value, 1);
}
}
$string = trim(preg_replace('/\s+/', ' ', $string));
$string_ar = explode(' ', mb_strtolower($string,'utf-8'));


foreach($string_ar as $key => $value {
$string_str .= mb_convert_case(mb_substr(trim($value), 0, 1), MB_CASE_TITLE, 'utf-8')
. mb_substr(trim($value),1)
. ' ';
}


$string = trim($string_str);

从2019-11-18开始,似乎没有人在 stackoverflow 上做到这一点,下面是 mb _ ucfirst ()应该如何在用户界面实现:

function mb_ucfirst(string $str, string $encoding = null): string
{
if ($encoding === null) {
$encoding = mb_internal_encoding();
}
return mb_strtoupper(mb_substr($str, 0, 1, $encoding), $encoding) . mb_substr($str, 1, null, $encoding);
}