iconv返回奇怪的结果

时间:2012-08-11 13:17:20

标签: php utf-8 character-encoding special-characters iconv

我正在努力通过自动脚本中的特殊字符来解决问题,以便在PHP中创建帐户。由于特殊字符在电子邮件地址和其他地方是不受欢迎的,我正试图摆脱它们,但是在将它们提供给脚本之前我无法删除它们,因为用户名必须正确地显示给其他用户。

实施例: JörgenGötz应该收到电子邮件地址jorgen.gotz@domain.com,但在用户数据库中,他的名字应该仍然是Jörgen和他的姓氏Götz。我希望我不清楚我想要实现的目标。

我一直在尝试使用iconv(),但我遇到了一些问题。请参阅下面的代码。

  

$ utf8_sentence ='Weiß,Goldmann,Göbel,Weiss,Göthe,GoetheundGötz';

     

setlocale(LC_ALL,'en_GB');

     

echo $ trans_sentence = iconv('UTF-8','ASCII // TRANSLIT',$ utf8_sentence);

上面的代码应该返回

  

Weiss,Goldmann,Gobel,Weiss,Gothe,Goethe und Gotz

但它给了我

  

Weiss,Goldmann,G“obel,Weiss,G”othe,Goethe und G“otz

我无法理解引文在那里做了什么。

Chrome和IE都给我相同的结果,页面使用的是charset =“utf-8”。

在使用iconv()之前,我尝试使用strtr()和一些“不需要的”字符数组,但我不喜欢每次需要来回转换字符串时必须设置特殊字符数组的解决方法。

有人可以提供解释或解释吗?

2 个答案:

答案 0 :(得分:0)

TRANSLIT尝试查找与请求的字符类似的字符。 由于字母ö不在ascii中,因此将其更改为一对umlat和基本字母。

答案 1 :(得分:-1)

尝试将此添加到您的系统(Ubuntu中的终端):

sudo locale-gen de_DE.UTF-8

然后更改您的php脚本的区域设置:

setlocale(LC_ALL, 'de_DE.UTF-8');

编辑(Windows设置)

在Windows Server中,您必须安装德语语言包并将上面的内容更改为:

setlocale(LC_ALL, 'germany');
相关问题