print iconv('UTF-8', 'us-ascii//TRANSLIT', 'Ин Совет Россия, дог фес ю!');
我不明白为什么它会抛出这个通知。该字符串是有效的UTF8。
它应该将所有字符转换为它们的ASCII等价,对吗?
例如,И
应为I
,н
应为n
,依此类推......
答案 0 :(得分:5)
iconv
函数实际上并不进行音译;参数名称TRANSLIT
具有误导性。 documentation说:“如果您将字符串// TRANSLIT附加到out_charset,则会激活音译。这意味着当一个角色无法在目标字符集中表示时,它可以通过一个或几个看起来相似的字符来近似。“显然这意味着只有一组特殊映射,比如”€“到”EUR“,以及“ß”到“ss”。
对于音译,你需要一些不同的东西。要将俄罗斯文本从西里尔字母音译为拉丁字母,很难确定使用哪种音译方案。在那之后,这只是原始工作。像这样的东西,只是添加了数据(覆盖俄语中使用的西里尔字母的数组和每个字母所需的音译):
$msg = 'Ин Совет Россия, дог фес ю!';
$cyr = array('и', 'я');
$lat = array('i', 'ya');
$latmsg = str_replace($cyr, $lat, $msg);
print $latmsg;