【问题标题】:iconv - Notice: iconv() [function.iconv]: Detected an illegal character in input stringiconv - 注意:iconv() [function.iconv]:在输入字符串中检测到非法字符
【发布时间】:2012-08-08 13:29:51
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我没有收到此通知,而只是一堆问号。似乎音译功能不适用于俄语(?)。

标签: php string unicode ascii iconv


【解决方案1】:

iconv 函数实际上并不进行音译;参数名称TRANSLIT 具有误导性。 documentation 说:“如果您将字符串 //TRANSLIT 附加到 out_charset 音译被激活。这意味着当一个字符不能在目标字符集中表示时,它可以通过一个或几个看起来相似的字符来近似。”显然,这意味着只是一组临时映射,例如“€”到“EUR”,以及“ß”到“ss”。

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

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

【讨论】:

猜你喜欢
  • 2014-08-16
  • 2012-02-02
  • 2016-06-19
  • 1970-01-01
  • 2017-05-13
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 2018-04-23
相关资源
最近更新 更多