PHP iconv() 将“ä”翻译成 "ae" 但它应该是 "a"
PHP iconv() translates "ä" to "ae" but it should be "a"
所以,我已经使用 iconv() 生成 URL-安全(以及在其他上下文中)版本的瑞典语单词很长时间了,所以单词 Stadsnät
变成了 Stadsnat
但我刚搬到一个新服务器并注意到它被翻译成 Stadsnaet
相反,打破了很多链接,我如何让 iconv() 回到 "dumber" ä -> a
而不是可能更正确的 ä -> ae
?
它似乎不是 PHP 的函数,在我的开发服务器上它被正确转换,但在我的生产服务器上却没有,并且两者都使用相同的 setlocale() 但我猜是语言环境文件在系统中可能会有所不同。
有什么想法吗?
我猜你没有正确指定 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')
所以,我已经使用 iconv() 生成 URL-安全(以及在其他上下文中)版本的瑞典语单词很长时间了,所以单词 Stadsnät
变成了 Stadsnat
但我刚搬到一个新服务器并注意到它被翻译成 Stadsnaet
相反,打破了很多链接,我如何让 iconv() 回到 "dumber" ä -> a
而不是可能更正确的 ä -> ae
?
它似乎不是 PHP 的函数,在我的开发服务器上它被正确转换,但在我的生产服务器上却没有,并且两者都使用相同的 setlocale() 但我猜是语言环境文件在系统中可能会有所不同。
有什么想法吗?
我猜你没有正确指定 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')