在括号后,将单词首字母大写的 PHP 函数

7

我正试图将php字符串中的每个单词都大写,但该函数无法检测到紧随其后的括号后面的单词。如何使括号后直接跟着的单词被大写?

例子:amharic (ethiopian) .... Amharic (Ethiopian)

(目前使用ucwords(),PHP显示Amharic(ethiopian))

6个回答

19

这是一个已知的错误,需要在开括号和第一个字母之间加上空格。以下是解决方法:

$var = "amharic (ethiopian)";

echo str_replace('( ', '(', ucwords(str_replace('(', '( ', $var)));

结果

阿姆哈拉语(埃塞俄比亚)

查看演示


在Drupal中使用:警告:format_string()中的strtr()函数期望参数1为字符串,但实际传递了数组。 - Francesco
@Francesco 这个问题被标记为 [tag:PHP]。 - Kermit

8

试一下这个,我已经尝试过了。

$text= "amharic (ethiopian)";
echo mb_convert_case($text, MB_CASE_TITLE, "UTF-8");

输出:阿姆哈拉语(埃塞俄比亚)

注意:似乎需要启用PHP上的mbstring函数。


1
以下函数用于将带括号的单词转换为括号后大写的形式。
    function ucWordWithBracket($edit){
        $new_word = str_replace("(","( ",$edit);
        $temp = ucwords($new_word);
        $new_word = str_replace("( ","(",$temp);
        return $new_word;
    }

ucWordWithBracket(阿姆哈拉语(埃塞俄比亚))

函数的输出为“阿姆哈拉语(埃塞俄比亚)”;


0

对于其他需要在包括连字符、括号等其他字符之间应用标题大小写的人。您可以使用带有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);

0

0

我认为问题在于php会将空格后的第一个字符大写,因为括号只是空格后的一个字符,所以它被视为单词的第一个字符必须大写,其后的其他字符被视为该单词的字符

因此,为了解决这个问题,我认为你必须在括号和字符之间加上空格,这样php就可以将括号检测为单个字符,而不是一个单词的开始字符 :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接