哪些因素会影响成功的iconv()TRANSLIT转换?

dre*_*ewm 11 php iconv

我试图确定哪些环境因素或其他因素对iconv()使用该TRANSLIT选项的调用结果有影响.

在通过Apache和CLI运行时,以下代码在本地对我有不同的结果.

<?php
    setlocale(LC_ALL, 'en_GB.UTF-8');
    header('Content-type: text/html; charset=utf-8'); // for web     

    $utf8_string = "Pádraig's naïve café";

    echo iconv('UTF-8', 'ASCII//IGNORE//TRANSLIT', $utf8_string);
?>
Run Code Online (Sandbox Code Playgroud)

预期结果: Padraig's naive cafe

Web浏览器中的结果: (empty string)

CLI的结果: P'adraig's na"ive cafe

在某些系统上,我确实得到了预期的结果,但我无法确定原因.

哪些因素会影响转换,我应该采取哪些步骤来增加获得良好结果的机会?

hak*_*kre 4

语言环境正在影响iconv音译。setlocale但是,您应该阅读文档手册页上的警告:

区域设置信息是按进程维护的,而不是按线程维护的。如果您在多线程服务器 API(例如 Windows 上的 IIS 或 Apache)上运行 PHP,则在脚本运行时可能会遇到区域设置突然发生变化的情况,尽管脚本本身从未调用setlocale()。发生这种情况是因为其他脚本同时在同一进程的不同线程中运行,使用setlocale()更改进程范围的区域设置。

因此,您可能设置了区域设置,但它在其他地方发生了更改。只要区域设置完全相同,您就会得到相同的结果。

您可以在这里找到 iconv 的文档和源代码:http://www.gnu.org/software/libiconv/ - 这通常是 PHP 使用的库。