2

我正在研究一种方法来解决用于在 PHP 中创建帐户的自动脚本中的特殊字符问题。由于电子邮件地址和其他地方不需要特殊字符,因此我试图摆脱它们,但在将它们提供给脚本之前我无法删除它们,因为用户名必须正确显示给其他用户。

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

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

$utf8_sentence = '魏斯、戈德曼、哥贝尔、魏斯、歌德、歌德和哥茨';

setlocale(LC_ALL, 'en_GB');

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

上面的代码应该返回

魏斯、戈德曼、戈贝尔、魏斯、歌德、歌德和戈茨

但相反它给了我

Weiss, Goldmann, G"obel, Weiss, G"othe, Goethe und G"otz

我无法理解报价在那里做了什么。

Chrome 和 IE 都给了我相同的结果,并且页面使用 charset="utf-8"。

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

任何人都可以提供解释或解决方案吗?

4

2 回答 2

0

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

sudo locale-gen de_DE.UTF-8

然后更改您的 php 脚本的语言环境:

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

编辑(Windows 设置)

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

setlocale(LC_ALL, 'germany');
于 2012-08-11T14:43:58.800 回答
0

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

于 2012-11-05T09:08:02.313 回答