2011-12-06 9 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: 

。どうして?

私は2つの環境でテストしている場合php -i | egrep "iconv (implementation|library)"出力のいずれか:

iconv implementation => libiconv 
iconv library version => 1.11 

または:

iconv implementation => libiconv 
iconv library version => 1.13 

iもsetlocaleを除去/添加、UTF-8に内部エンコーディングをivonv設定しようとしていますしかし、すべて役に立たない。 iconvはlatinとlatin-from-latin文字のみを認識しているようです。

UPDATEecho 'āēī' | iconv -f utf-8 -t ASCII//TRANSLIT作品出力aeiながら予想通り端末コマンドecho 'ΑαΒβΓγΔδ' | iconv -f utf-8 -t ASCII//TRANSLITは、エラーiconv: (stdin):1:0: cannot convertを生成するように、それはiconvのに問題がなければなりません。

iconv --version出力iconv (GNU libiconv 1.14)(著作権情報の他に)。

答えて

4

使用ASCII//IGNORE//TRANSLIT

のiconv()はiconv()のデフォルトの振る舞いである右が文字列を、切断、第illegarチャーで停止し、それは//TRANSLIT

+0

//IGNOREスイッチを尊重しませんでしたテストしましたが、成功しませんでした – dynamic

+0

@ yes123どのようにあなたが試したかわかりません。しかし、それは最初のケースのために働く。 PHPのマニュアルを読んで、それがうまくいくかどうか分かります。 – Rifat

+0

最初のケースはもちろん動作しますが、2番目と3番目は何も変わりません。 – dynamic

関連する問題