2014-05-13 4 views
6

모든 문자가 대문자 인 문자열이 있습니다. ucwords() 및 mb_strtolower() 함수를 사용하여 문자열의 첫 문자 만 대문자로 사용합니다. 하지만 단어의 첫 글자에 악센트가있을 때 몇 가지 문제가 있습니다. 예 :ucwords는 악센트 부호가있는 문자를 대문자로 사용하지 않습니다.

ucwords(mb_strtolower('GRANDE ÁRVORE')); //outputs 'Grande árvore' 

두 번째 단어의 첫 글자가 대문자로 표시되지 않는 이유는 무엇입니까? 이 문제를 해결하려면 어떻게해야합니까?

+1

케이스 변환은 생각보다 어렵습니다. 제목 모드와 함께 ['mb_convert_case()'] (http://php.net/manual/en/function.mb-convert-case.php)를 시도 했습니까? – Maerlyn

+0

괜찮습니다.'echo ucwords (mb_strtolower ('GRANDE ÁRVORE'));'결과'Grande Árvore'. 오류 표시를 켜고 오류가 있는지 알려주십시오. – Chorochrondochor

+0

@Chorochrondochor Nope도 나를 위해 작동하지 않습니다. –

답변

7

ucwords는 비 ASCII 또는 비 라틴-1 인코딩을 행복하게 태평 핵심 PHP 함수 중 하나입니다 * 멀티 바이트 문자열 및/또는 비 ASCII 문자열을 처리하기 위해, 당신은 알고 멀티 바이트 mb_convert_case 사용해야합니다.

mb_convert_case($str, MB_CASE_TITLE, 'UTF-8') 
// your string encoding here --------^^^^^^^ 

* ASCII로만 작동하는지, 아니면 적어도 라틴어 -1로 작동하는지 완전히 확신 할 수는 없지만 알아 내기가 쉽지 않습니다.

+0

그것은 나를 위해 잘 작동, 감사합니다! –

-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); 
+0

인코딩 검색 및 변환으로 무엇을하고 있습니까?! * "문자열이 UTF-8로 인코딩 된 경우 utf8_encode ..."* ...?! – deceze

+0

@deceze 실수를 발견해 주셔서 감사합니다. 답변이 업데이트되었습니다. – Danieloplata

+0

아직 좋지 않습니다. 1)'mb_detect_encoding'은 신뢰할 만하다. 2) UTF-8이 아니면 * 아무것도 할 수 있지만'utf8_encode'는 Latin-1, 3만을 처리한다. mb_convert_case' 매개 변수가 문자열의 인코딩에 상관없이 4) 문자열이 무엇인지 알고 * 처음에 추측하고 테스트 할 필요가 없다는 것을 * 알고 있어야합니다 *. – deceze

관련 문제