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

ell*_*uty 1 php string unicode ascii iconv

print iconv('UTF-8', 'us-ascii//TRANSLIT', '?? ????? ??????, ??? ??? ?!');

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

它应该将所有字符转换为它们的ASCII等价物,对吧?

例如?应该I,?应该是n等等......

Juk*_*ela 5

iconv功能实际上并不进行音译; 参数名称TRANSLIT具有误导性.该文件说:"如果你将字符串// TRANSLIT到out_charset音译被激活.这意味着当一个角色无法在目标字符集中表示时,它可以通过一个或几个看起来相似的字符来近似."显然这意味着只有一组特殊映射,比如"€"到"EUR",以及"ß"到"ss".

对于音译,你需要不同的东西.要将俄罗斯文本从西里尔字母音译为拉丁字母,很难确定使用哪种音译方案.在那之后,这只是原始工作.像这样的东西,只是添加了数据(覆盖俄语中使用的西里尔字母的数组和每个字母所需的音译):

$msg =  '?? ????? ??????, ??? ??? ?!';
$cyr = array('?', '?');
$lat = array('i', 'ya');
$latmsg = str_replace($cyr, $lat, $msg);
print $latmsg;
Run Code Online (Sandbox Code Playgroud)