我正在尝试将 php 字符串中的每个单词大写,但该函数没有检测到紧跟括号的单词。如何使括号后的单词大写?
示例:阿姆哈拉语(埃塞俄比亚语)....阿姆哈拉语(埃塞俄比亚语)
(目前使用 ucwords(),PHP 显示阿姆哈拉语(埃塞俄比亚语))
我正在尝试将 php 字符串中的每个单词大写,但该函数没有检测到紧跟括号的单词。如何使括号后的单词大写?
示例:阿姆哈拉语(埃塞俄比亚语)....阿姆哈拉语(埃塞俄比亚语)
(目前使用 ucwords(),PHP 显示阿姆哈拉语(埃塞俄比亚语))
试试这个,我试过了,
$text= "amharic (ethiopian)";
echo mb_convert_case($text, MB_CASE_TITLE, "UTF-8");
输出 :阿姆哈拉语(埃塞俄比亚语)
注意:看起来 PHP 上的 mbstring 功能是要启用的。
下面的函数用于将带括号的单词转换为括号后的大写
function ucWordWithBracket($edit){
$new_word = str_replace("(","( ",$edit);
$temp = ucwords($new_word);
$new_word = str_replace("( ","(",$temp);
return $new_word;
}
ucWordWithBracket(阿姆哈拉语(埃塞俄比亚语))
函数的输出是“阿姆哈拉语(埃塞俄比亚语)”;
您应该能够使用 preg_replace ( http://php.net/manual/en/function.preg-replace.php/[A-Z][a-zA-Z]*/
) 和类似或类似的正则表达式来解决它。
我认为问题在于 php 要将空格后面的第一个字符大写,因为括号只是空格后面的一个字符,所以它被认为是单词中的第一个字符必须大写,后面的其他字符被考虑作为这个世界的人物
所以要解决这个问题,我认为你必须在括号和字符之间留出空格,以便 php 可以将括号检测为单个字符而不是单词的开始字符:)
对于需要在其他字符(包括破折号、方括号和圆括号)周围加上标题的任何人。您可以将正则表达式与 preg_replace_callback 一起使用来捕获以破折号分隔或以不在字母表中的字符开头的单词。
/** Capitalize first letter if string is only one word **/
$STR = ucwords(strtolower($STR));
/** Correct Title Case for words with non-alphabet charcters ex. Screw-Washer **/
$STR = preg_replace_callback('/([A-Z]*)([^A-Z]+)([A-Z]+)/i',
function ($matches) {
$return = ucwords(strtolower($matches[1])).$matches[2].ucwords(strtolower($matches[3]));
return $return;
}, $STR);