gpt4 book ai didi

php - 为什么PHP的iconv需要setlocale?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:48:32 25 4
gpt4 key购买 nike

我目前正在尝试通过将 UTF-8 字符串中的所有特殊字符和重音符转换为等效的 ASCII 字符来删除它们。

所以我只是使用这段代码:

$result = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $input);

问题是,例如单词“début”变成了“dbut”而不是“debut”。为了让它工作,我需要添加对 setlocale 的调用,如下所示:

setlocale(LC_ALL, 'en_US.UTF8');
$result = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $input);

我不明白为什么。我认为 UTF-8 和 ASCII 总是相同的,无论您使用什么语言环境。

编辑:我不是说 UTF-8 等于 ASCII,我的意思是 UTF-8 总是等于 UTF-8 而 ASCII 总是等于 ASCII

最佳答案

与 ASCII 重叠的 UTF-8 子集(代码点 0-127)确实与 ASCII 相同。但是,带重音的拉丁字符不是 ASCII 字符集的一部分,如果您自己没有 setlocale,系统的默认区域设置(显然不包含这些带重音的字符)将用于获取字符集一起工作。

一般来说,iconv 可能有点不确定; introduction 中提到了这一点扩展名:

This module contains an interface to iconv character set conversion facility. With this module, you can turn a string represented by a local character set into the one represented by another character set, which may be the Unicode character set. Supported character sets depend on the iconv implementation of your system. Note that the iconv function on some systems may not work as you expect. In such case, it'd be a good idea to install the GNU libiconv library. It will most likely end up with more consistent results.

关于php - 为什么PHP的iconv需要setlocale?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7931853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com