iconv - 注意:iconv() [function.iconv]:在输入字符串中检测到非法字符


iconv - Notice: iconv() [function.iconv]: Detected an illegal character in input string

print iconv('UTF-8', 'us-ascii//TRANSLIT', 'Ин Совет Россия, дог фес ю!');

我不明白为什么它会抛出这个通知。该字符串是有效的 UTF8。

它应该将所有字符转换为其 ASCII 等效字符,对吧?

例如,И应该是I的,н应该是n等等......

iconv函数实际上并不执行音译;参数名称TRANSLIT具有误导性。文档说:"如果您将字符串//TRANSLIT 附加到out_charset则激活音译。这意味着当一个字符无法在目标字符集中表示时,可以通过一个或多个外观相似的字符来近似地表示它。显然,这意味着只是一组临时映射,例如"€"到"EUR",以及"ß"到"ss"。

对于音译,您需要一些不同的东西。要将俄语文本从西里尔字母音译为拉丁字母,困难的部分是决定使用哪种音译方案。在那之后,这只是原始工作。像这样的东西,只是添加了数据(涵盖俄语中使用的西里尔字母和每个字母的所需音译的数组):

$msg =  'Ин Совет Россия, дог фес ю!';
$cyr = array('и', 'я');
$lat = array('i', 'ya');
$latmsg = str_replace($cyr, $lat, $msg);
print $latmsg;