为什么PHP';需要设置语言环境吗?

为什么PHP';需要设置语言环境吗?,php,locale,iconv,Php,Locale,Iconv,如果可能的话,我正在尝试将UTF-8字符串中的所有特殊字符和重音符号转换为等效的ASCII字符,从而将其删除 因此,我只是使用以下代码: $result = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $input); 问题是,例如,单词“début”变成了“dbut”,而不是“首次亮相”。 要使其工作,我需要添加对setlocale的调用,如下所示: setlocale(LC_ALL, 'en_US.UTF8'); $result = iconv('U

如果可能的话,我正在尝试将UTF-8字符串中的所有特殊字符和重音符号转换为等效的ASCII字符,从而将其删除

因此,我只是使用以下代码:

$result = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $input);
问题是,例如,单词“début”变成了“dbut”,而不是“首次亮相”。 要使其工作,我需要添加对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。UTF-8与ASCII重叠的子集(即代码点0-127)确实与ASCII相同。但是,重音拉丁字符不是ASCII字符集的一部分,如果您自己不
setlocale
,系统的默认区域设置(显然不包含这些重音字符)将用于获取要使用的字符集

一般来说,
iconv
可能有点不确定;这一点在扩展部分的后面部分提到:

此模块包含iconv字符集转换接口 设施。使用此模块,您可以转换由 本地字符集转换为由另一个字符集表示的字符集, 可能是Unicode字符集。支持的字符集 取决于系统的iconv实现请注意,iconv 某些系统上的功能可能无法按预期工作。在这种情况下, 安装GNULibiconv库是个好主意。会的 最有可能得到更一致的结果


ASCII和UTF-8并不相同。UTF-8在数量级上更大。