2011-12-06 2 views
3

난 다음 테스트 코드를 가지고 :PHP의 iconv 그리스어/키릴 음역이 작동하지 않습니다

setlocale(LC_ALL, 'en_US.UTF8'); 
function t($text) 
{ 
    echo "$text\n"; 
    echo "encoding: ", mb_detect_encoding($text), "\n"; 

    // transliterate 
    $text = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $text); 
    echo "iconv: ", $text, "\n"; 
} 

// Latvian alphabet 
t('AĀBCČDEĒFGĢHIĪJKĶLĻMNŅOPRSŠTUŪVZŽ aābcčdeēfgģhiījkķlļmnņoprsštuūvzž'); 
// Greek alphabet 
t('ΑαΒβΓγΔδΕεΖζΗηΘθΙιΚκΜμΝνΞξΟοΠπΡρΣσςΤτΥυΦφΧχΨψΩω'); 
// Cyrillic alphabet + some rarer versions 
t('АБВГДЕЖЅЗИІКЛМНОПҀРСТѸФХѠЦЧШЩЪꙐЬѢꙖѤЮѦѪѨѬѮѰѲѴ абвгдеёжзийклмнопрстуфхцчшщъыьэюя'); 

및 출력 : 그것은 본질적으로 모든 그리스어와 키릴 문자를 무시

AĀBCČDEĒFGĢHIĪJKĶLĻMNŅOPRSŠTUŪVZŽ aābcčdeēfgģhiījkķlļmnņoprsštuūvzž 
encoding: UTF-8 
iconv: AABCCDEEFGGHIIJKKLLMNNOPRSSTUUVZZ aabccdeefgghiijkkllmnnoprsstuuvzz 

ΑαΒβΓγΔδΕεΖζΗηΘθΙιΚκΜμΝνΞξΟοΠπΡρΣσςΤτΥυΦφΧχΨψΩω 
encoding: UTF-8 
iconv: 

АБВГДЕЖЅЗИІКЛМНОПҀРСТѸФХѠЦЧШЩЪꙐЬѢꙖѤЮѦѪѨѬѮѰѲѴ абвгдеёжзийклмнопрстуфхцчшщъыьэюя 
encoding: UTF-8 
iconv: 

. 왜?

나는 두 환경에서 테스트 한 곳 php -i | egrep "iconv (implementation|library)" 출력 중 하나

iconv implementation => libiconv 
iconv library version => 1.11 

또는 :

iconv implementation => libiconv 
iconv library version => 1.13 

나는 또한 setlocale 추가/제거, UTF-8로 내부 인코딩 ivonv 설정 시도 기능을 제공하지만, 아무 소용이 없습니다. iconv는 라틴어와 라틴어에서 파생 된 문자 만 인식하는 것으로 보입니다.

UPDATE : 단말 명령 echo 'ΑαΒβΓγΔδ' | iconv -f utf-8 -t ASCII//TRANSLIT 오류 iconv: (stdin):1:0: cannot convert 생산으로 echo 'āēī' | iconv -f utf-8 -t ASCII//TRANSLIT 작품 aei 출력이 예상하면서, 문제의 iconv이어야한다.

iconv --version 출력 iconv (GNU libiconv 1.14) (저작권 정보 외에).

답변

4

사용 ASCII//IGNORE//TRANSLIT

iconv에서() iconv()의 기본 동작입니다 거기 문자열을, 차단, 첫 illegar 숯불에 중단, 그래서 그것은 //TRANSLIT

+0

//IGNORE 스위치를 존중하지 않았다 난 당신이 시도했던 방법을 모르는 yes123 @ 성공하지 – dynamic

+0

으로 테스트했다. 그러나 첫 번째 경우에는 작동합니다. PHP 매뉴얼을 읽으십시오. 그러면 PHP는 작동 할 것이고 그렇지 않을 수도 있습니다. – Rifat

+0

첫 번째 경우는 물론 두 번째와 세 번째는 아무 것도 바뀌지 않습니다. – dynamic

관련 문제