我正在尝试从PHP字符串中的字符中删除重音符号,作为使字符串在URL中可用的第一步。
我正在使用以下代码:
$input = "Fóø Bår"; setlocale(LC_ALL, "en_US.utf8"); $output = iconv("utf-8", "ascii//TRANSLIT", $input); print($output);
我期望的输出将是这样的:
F'oo Bar
但是,不是将重音字符音译,而是将它们替换为问号:
F?? B?r
我在网上可以找到的所有内容都表明,设置语言环境将解决此问题,但是我已经这样做了。我已经检查了以下详细信息:
locale -a
iconv -l
mb_check_encoding
setlocale
'en_US.utf8'
FALSE
服务器正在使用错误的iconv实现。它具有 glibc 版本,而不是必需的 libiconv 版本。
请注意,某些系统上的iconv功能可能无法按预期工作。在这种情况下,最好安装GNU libiconv库。最终可能会得到更一致的结果。 – PHP手册对iconv的介绍
该phpinfo函数的输出中包含有关PHP使用的iconv实现的详细信息。
phpinfo
(我无法在与此项目一起使用的服务器上使用正确的iconv库重新编译PHP,因此下面我接受的答案是在没有iconv支持的情况下删除重音符号的最有用的答案。)
我认为这里的问题是您的编码将ä和å的符号视为与’a’不同。实际上,strtr的PHP文档提供了一个以难看的方式消除重音的示例