我目前正在尝试删除UTF-8字符串中的所有特殊字符和重音,如果可能的话,将它们转换为等效的ASCII字符。
因此,我只是简单地使用了以下代码:
$result = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $input);问题是,例如,“dé但是”一词变成了"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。
发布于 2011-10-28 16:15:58
与ASCII重叠的UTF-8子集(即代码点0-127)确实与ASCII完全相同。但是,重音拉丁字符不是ASCII字符集的一部分,如果您自己不使用setlocale,系统的默认区域设置(它显然不包含这些重音字符)将用于获得要使用的字符集。
一般来说,iconv可能有点不稳定;在扩展的引言中提到了这一点:
这一模块包含一个接口,以图标字符集转换设施。使用此模块,您可以将由本地字符集表示的字符串转换为由另一个字符集表示的字符串,该字符集可能是Unicode字符集。支持的字符集取决于您的系统的the实现。注意,某些系统上的iconv函数可能不像您预期的那样工作。在这种情况下,安装GNU库是个好主意。它很有可能最终得到更一致的结果。
https://stackoverflow.com/questions/7931853
复制相似问题