6

我正在尝试将 php 字符串中的每个单词大写,但该函数没有检测到紧跟括号的单词。如何使括号后的单词大写?

示例:阿姆哈拉语(埃塞俄比亚语)....阿姆哈拉语(埃塞俄比亚语)

(目前使用 ucwords(),PHP 显示阿姆哈拉语(埃塞俄比亚语))

4

6 回答 6

17

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

$var = "amharic (ethiopian)";

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

结果

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

查看演示

于 2013-03-29T01:35:08.257 回答
7

试试这个,我试过了,

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

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

注意:看起来 PHP 上的 mbstring 功能是要启用的。

于 2013-03-29T01:40:53.203 回答
1

下面的函数用于将带括号的单词转换为括号后的大写

    function ucWordWithBracket($edit){
        $new_word = str_replace("(","( ",$edit);
        $temp = ucwords($new_word);
        $new_word = str_replace("( ","(",$temp);
        return $new_word;
    }

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

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

于 2014-03-11T07:19:18.177 回答
0

您应该能够使用 preg_replace ( http://php.net/manual/en/function.preg-replace.php/[A-Z][a-zA-Z]*/ ) 和类似或类似的正则表达式来解决它。

于 2013-03-29T01:36:34.473 回答
0

我认为问题在于 php 要将空格后面的第一个字符大写,因为括号只是空格后面的一个字符,所以它被认为是单词中的第一个字符必须大写,后面的其他字符被考虑作为这个世界的人物

所以要解决这个问题,我认为你必须在括号和字符之间留出空格,以便 php 可以将括号检测为单个字符而不是单词的开始字符:)

于 2013-03-29T01:37:11.903 回答
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);
于 2014-02-20T23:41:55.163 回答