PHP iconv()将“ä”转换为“ ae”,但应为“ a”

时间:2019-08-27 16:43:57

标签: php linux locale translation iconv

因此,我很长时间以来一直使用iconv()来生成瑞典语单词的URL安全版本(在其他上下文中也是如此),因此单词Stadsnät变成了Stadsnat,但是我刚移到新服务器上,注意到它已转换为Stadsnaet,断开了许多链接,我如何使iconv()返回“空” ä -> a可能更正确的ä -> ae中的一个?

它似乎不是PHP的功能,在我的开发服务器上它已正确转换,但在我的生产服务器上却没有正确转换,并且都使用相同的setlocale(),但是我猜想系统中的语言环境文件可能会有所不同。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我想您没有正确指定setLocale。

通过这个小例子,您可以看到不同之处:

<?php
$str = 'Stadsnät';

setlocale(LC_ALL, 'en_GB');
$translit = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
echo $translit . PHP_EOL;
// echos Stadsnat


setlocale(LC_ALL, 'de_CH');
$translit = iconv('UTF-8', 'ASCII//TRANSLIT', $str);

echo $translit . PHP_EOL;
// echos Stadsnaet

请确保在两台服务器上都尝试使用此小脚本。

编辑:

基于评论中的对话: setLocale(LC_ALL, 'en_US.UTF8')解决了这个问题。

作为替代,以下代码也应这样做:

transliterator_transliterate('Any-Latin; Latin-ASCII; [\u0080-\uffff] remove', 'Stadsnät')