因此,我很长时间以来一直使用iconv()来生成瑞典语单词的URL安全版本(在其他上下文中也是如此),因此单词Stadsnät
变成了Stadsnat
,但是我刚移到新服务器上,注意到它已转换为Stadsnaet
,断开了许多链接,我如何使iconv()返回“空” ä -> a
可能更正确的ä -> ae
中的一个?
它似乎不是PHP的功能,在我的开发服务器上它已正确转换,但在我的生产服务器上却没有正确转换,并且都使用相同的setlocale(),但是我猜想系统中的语言环境文件可能会有所不同。
有什么想法吗?
答案 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')