4

私は次のテストコードを持っています:

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

ivonvの内部エンコーディングをUTF-8に設定して、setlocale機能を追加/削除しようとしましたが、すべて役に立ちませんでした。iconv は、ラテン語およびラテン語由来の文字のみを認識するようです。

更新echo 'ΑαΒβΓγΔδ' | iconv -f utf-8 -t ASCII//TRANSLIT: 端末コマンドがエラーiconv: (stdin):1:0: cannot convertを生成するため、iconv に問題があるに違いありませんが、期待どおりにecho 'āēī' | iconv -f utf-8 -t ASCII//TRANSLIT動作し、出力aeiされます。

iconv --version出力iconv (GNU libiconv 1.14)(著作権情報以外)。

4

1 に答える 1

3

使用するASCII//IGNORE//TRANSLIT

iconv() は最初のillegar char で停止し、文字列をすぐそこで切り捨てました。これは のデフォルトの動作ですiconv()//IGNORE//TRANSLIT

于 2011-12-06T11:50:12.617 に答える