2013-03-29 69 views
5

我想大寫php字符串中的每個單詞,但函數沒有檢測到一個單詞,緊接着是一個括號。我怎樣才能讓一個括號後面的一個單詞大寫?Php大括號後面的單詞

實施例:阿姆哈拉語(埃塞俄比亞)....阿姆哈拉(黑人)

(目前使用ucwords(),PHP顯示阿姆哈拉語(埃塞俄比亞))

回答

16

這是一個known bug這需要有被空白在開括號和第一個字母之間。這裏有一個解決方法:

$var = "amharic (ethiopian)"; 

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

結果

Amharic (Ethiopian)

See the demo

+0

strtr函數的效率()預計參數1是串,陣列中的給定FORMAT_STRING() – Francesco

+0

@Francesco這個問題被標記[標籤:PHP] – Kermit

0

我認爲問題在於php會在空格後面加上第一個字符,因爲括號只是空格之後的一個字符,所以它被認爲是單詞中的第一個字符必須是大寫字母和其他字符folow中它被認爲是這個世界的人物

因此,要解決這個我認爲你必須支架和人物之間的空間,以便PHP可以檢測支架爲單個字符,而不是開始一個字的字符:)

7

試試這個,我試了一下,

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

輸出:阿姆哈拉語(埃塞俄比亞)

注:它看起來像PHP的mbstring的功能被啓用。

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); 
1

下面功能使用隱蔽字與支架成支架後大寫

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

ucWordWithBracket(阿姆哈拉語(埃塞俄比亞))funcation的

輸出爲 「阿姆哈拉(黑人)」;警告:在Drupal使用它