最佳答案
我试图删除 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
生成的列表中)支持源和目标编码(UTF-8和 ASCII)mb_check_encoding
函数进行验证)setlocale
的调用成功(它返回 'en_US.utf8'
而不是 FALSE
)服务器使用了错误的 iconv 实现。它有 Glibc版本,而不是所需的 Libiconv版本。
注意,某些系统上的 iconv 函数可能不会像您期望的那样工作。在这种情况下,最好安装 GNU libiconv 库。最终很可能会得到更加一致的结果。
PHP 手册对 iconv 的介绍
有关 PHP 使用的 iconv 实现的详细信息包含在 phpinfo
函数的输出中。
(我无法在我正在为这个项目工作的服务器上使用正确的 iconv 库重新编译 PHP,所以我接受的答案是下面这个在没有 iconv 支持的情况下对删除重音最有用的答案。)