2015-01-29 3 views
0

cyril 문자에 문제가 있습니다. 우리 사이트는 utf-8이며이 문자를 허용하지만 문자를 전달하는 외부 소스는 허용하지 않습니다. 우리는 사람 이름을 전달하려고합니다. 그들은 다른 다른 문자셋을 가지고 있습니다 (예를 들어 iso-8859-1).cyril을 서양어로 변경하십시오 (모두 utf-8). - ph

부적절한 변환을 피하기 위해 utr-8에서 각각의 cyril 문자를 수동으로 동등한 서양 문자로 변환하는 PHP의 쉬운 방법이 있습니까? 변환 방법을 직접 사용하는 경우 모두 물음표가 표시됩니다.

+0

당신이 해결책을 찾기 위해 시도? 서리 문자에 시릴 문자를 매핑하려면 str_replace보다 어렵지 않아야합니다. – GordonM

+0

시릴 문자는 이미 서양 문자처럼 들립니다. ㅎ :-) – halfer

+1

키릴 문자를 매핑하는 방법은 매우 많습니다 라틴 문자로 된 편지. 가장 큰 문제는 특정 상황에 가장 적합한 방법을 결정하고 정확하게 정의하는 것입니다. 구현은 매우 사소한 것입니다. –

답변

1

내 문제를 해결 한 해결책을 찾았습니다. 아래 함수는 키릴 문자의 각 문자를 동등한 서양 문자로 변환합니다. 이름은이 함수를 사용하여 상당히 정확하게 변환됩니다.

대체 할 문자는 utf8_decode()를 사용하여 iso-8859-1로 변환 할 수 있습니다.

function do_translit($st) { 
    $replacement = array(
     "й"=>"i","ц"=>"c","у"=>"u","к"=>"k","е"=>"e","н"=>"n", 
     "г"=>"g","ш"=>"sh","щ"=>"sh","з"=>"z","х"=>"x","ъ"=>"\'", 
     "ф"=>"f","ы"=>"i","в"=>"v","а"=>"a","п"=>"p","р"=>"r", 
     "о"=>"o","л"=>"l","д"=>"d","ж"=>"zh","э"=>"ie","ё"=>"e", 
     "я"=>"ya","ч"=>"ch","с"=>"c","м"=>"m","и"=>"i","т"=>"t", 
     "ь"=>"\'","б"=>"b","ю"=>"yu", 
     "Й"=>"I","Ц"=>"C","У"=>"U","К"=>"K","Е"=>"E","Н"=>"N", 
     "Г"=>"G","Ш"=>"SH","Щ"=>"SH","З"=>"Z","Х"=>"X","Ъ"=>"\'", 
     "Ф"=>"F","Ы"=>"I","В"=>"V","А"=>"A","П"=>"P","Р"=>"R", 
     "О"=>"O","Л"=>"L","Д"=>"D","Ж"=>"ZH","Э"=>"IE","Ё"=>"E", 
     "Я"=>"YA","Ч"=>"CH","С"=>"C","М"=>"M","И"=>"I","Т"=>"T", 
     "Ь"=>"\'","Б"=>"B","Ю"=>"YU", 
    ); 

    foreach($replacement as $i=>$u) { 
     $st = mb_eregi_replace($i,$u,$st); 
    } 
    return $st; 
    } 

참조 : http://php.net/manual/en/function.mb-eregi-replace.php