我有一個字母大寫的所有字母。我正在使用ucwords()和mb_strtolower()函數僅將字符串的第一個字母大寫。但是,當一個單詞的第一個字母有重音時,我遇到了一些問題。例如:ucwords不用大寫重音字母
ucwords(mb_strtolower('GRANDE ÁRVORE')); //outputs 'Grande árvore'
爲什麼第二個單詞的第一個字母沒有被大寫?我能做些什麼來解決這個問題?
我有一個字母大寫的所有字母。我正在使用ucwords()和mb_strtolower()函數僅將字符串的第一個字母大寫。但是,當一個單詞的第一個字母有重音時,我遇到了一些問題。例如:ucwords不用大寫重音字母
ucwords(mb_strtolower('GRANDE ÁRVORE')); //outputs 'Grande árvore'
爲什麼第二個單詞的第一個字母沒有被大寫?我能做些什麼來解決這個問題?
ucwords
是PHP的核心功能,這是幸福無視非ASCII或非拉丁-1編碼一個*如需辦理字節字符串和/或非ASCII字符串,則應該使用多字節意識到mb_convert_case
:
mb_convert_case($str, MB_CASE_TITLE, 'UTF-8')
// your string encoding here --------^^^^^^^
*我不完全確定它是否只適用於ASCII或至少與拉丁-1,但我甚至不打擾瞭解。
它對我來說很好,謝謝! –
ucwords
不能識別重音字符。嘗試使用mb_convert_case
。
$str = 'GRANDE ÁRVORE';
function ucwords_accent($string)
{
if (mb_detect_encoding($string) != 'UTF-8') {
$string = mb_convert_case(utf8_encode($string), MB_CASE_TITLE, 'UTF-8');
} else {
$string = mb_convert_case($string, MB_CASE_TITLE, 'UTF-8');
}
return $string;
}
echo ucwords_accent($str);
你在做什麼編碼檢測和轉換?! *「如果字符串是UTF-8編碼,那麼utf8_encode ...」* ...?! – deceze
@deceze感謝您發現錯誤,更新了答案。 – Danieloplata
這還不是很好。 1)'mb_detect_encoding'只是可靠的,2)如果它不是* UTF-8它可能是任何東西,但'utf8_encode'只能處理拉丁-1,3)而不是轉換字符串,你可以簡單地改變第三個參數'mb_convert_case'到你的字符串所在的任何編碼,4)你應該*知道*你的字符串是什麼編碼,而不需要首先猜測和測試。 – deceze
大小寫轉換比您想象的要困難。你用標題模式試過['mb_convert_case()'](http://php.net/manual/en/function.mb-convert-case.php)嗎? – Maerlyn
它適合我:'回聲ucwords(mb_strtolower('GRANDE'RVORE'))''結果'格蘭德Árvore'。嘗試打開顯示的錯誤,並告訴我們是否有任何錯誤出現。 – Chorochrondochor
@Chorochrondochor Nope也不適合我。 –