私は次のテストコードを持っています:
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)
(著作権情報以外)。