将所有单词小写,每个单词的第一个字母大写

Make all words lowercase and the first letter of each word uppercase

我有一个大写字母不正确的字符串,如下所示:

$str = "tHis iS a StRinG thAt NeEds ProPer CapiTilization";
$newStr = ucfirst($str);
echo $newStr;

我怎样才能将每个单词的首字母大写,将错误大写的字母小写?我需要字符串完全是标题大小写。

我知道我可以降低然后使用 ucwords() 但是有更短的方法吗?

How would I be able to capitalize the first letter of each word and lower case the incorrectly capitalized letters?

ucwords() will capitilize the first letter of each word. You can combine it with strtolower() 全部小写。

例如:

ucwords(strtolower('HELLO WORLD!')); // Hello World!

是的,你可以用两个函数来完成ucwords() and strtolower()

<?php
    $str = "tHis iS a StRinG thAt NeEds ProPer CapiTilization";
    $newStr = ucwords(strtolower($str));
    echo $newStr;
?>

解释:

strtolower() 将使您的所有字符串变为小写。

现在,对结果字符串应用 ucwords() 将使每个世界首都的第一个字母产生所需的输出。

an earlier question where I have already suggested mb_convert_case(),但该题的样例文字比较乏味。

有一个单一的原生函数可以对字符串中的多个单词执行 title-casing,它是 multibyte-safe。这是一个很好的解决方案,因为在将所有单词的首字母大写之前,您不需要将字符串全部准备为小写。

代码:(Demo)

$string = "tHis iS a StRinG thAt NeEds ProPer CapiTilization";
echo mb_convert_case($string, MB_CASE_TITLE, 'UTF-8');

输出:

This Is A String That Needs Proper Capitilization

Laravel还提供了一个可以使用的辅助方法:title().

use Illuminate\Support\Str;

$converted = Str::of('a nice title uses the correct case')->title();

// A Nice Title Uses The Correct Case

来源:https://laravel.com/docs/8.x/helpers#method-fluent-str-title