例如:
$text = "пд";
echo 'Plain : ', iconv("UTF-8", "us-ascii//TRANSLIT", $text), PHP_EOL;
输出
Plain :
Notice: iconv() [function.iconv]: Detected an illegal character in input string in ...
我尝试添加
setlocale(LC_CTYPE, 'en_US.UTF8');
但没关系...
答案 0 :(得分:0)
您需要确保源文件实际上是以UTF-8保存的,而不是Windows-1251。否则这些字符将不代表有效的UTF-8序列。
<强>更新强>
是的,iconv // TRANSLATE似乎依赖于语言环境。如果将其设置为 source 语言区域设置,它可能会正常工作。所以在你的例子中,我猜这是一些西里尔语的语言环境,但不是'en_US'。
但事实上,如果你只需要一种语言的音译,那么自己创建一个简单的翻译表会更可靠:
$trans = [
'а' => 'a',
'д' => 'd',
'п' => 'p',
...
];
$translit = str_replace(array_keys($trans), array_values($trans), $source_string);
但如果你需要它适用于所有/未知语言,你将不得不使用更复杂的东西,例如http://php.net/manual/en/class.transliterator.php