function fn_normalize($s) { // Replaces all diacritics/accents
return transliterator_transliterate('Any-Latin; Latin-ASCII; Lower()', $s);
}
$a = [" Válue1 ", "válue2 ", "válue3", "Café à la carte", "A æ Übérmensch på høyeste nivå! И я люблю PHP! fi"];
$result = array_map('fn_normalize', $a);
var_dump($result);
8条答案
按热度按时间wn9m85ua1#
在没有找到合适的转换器后,我创建了适合我需要的自己的集合,包括我最喜欢的西里尔文转换,默认情况下有许多变化。
qni6mghb2#
我的第一个建议是iconv函数。也就是说,因为它内置在PHP中,所以不需要任何外部或第三方库。此外,它是一个专门用来完成您想要完成的任务的函数(接受一个字符集作为输入,并输出一个替代字符集,特别是从UTF-8到ASCII)。下面是如何调用此函数的示例:
关于这个PHP函数的细节的更多信息可以在这里找到:http://php.net/manual/en/function.iconv.php
注意:iconv函数接受字符串输入,因此您需要迭代数据,并解析数据,以便传入字符串输入。
kyvafyod3#
我编写了这个函数,它使用PHP内置的HTML实体转换表来 * 罗马化 * 字符:
它的工作原理是应用
htmlentities()
,然后删除公共实体后缀,一个简单的例子:要注意的是,要使其正常工作,您的文件需要使用UTF-8编码(显然没有BOM)。
另一个例子见我的另一个答案。
db2dz4w84#
使用
//TRANSLIT
选项尝试iconv()
http://www.php.net/manual/en/function.iconv.php,或recode_string()
http://www.php.net/manual/en/function.recode-string.php,或mb_convert_encoding()
http://www.php.net/manual/en/function.mb-convert-encoding.phphzbexzde5#
看到这个老问题,仍然不知道最好的答案是什么。如果它可以帮助其他人,这里是一个数组,我自动作出了从
http://www.fileformat.info/info/charset/UTF-8/list.htm
xxls0lw86#
我希望这对任何人都有用:https://github.com/infralabs/DiacriticsRemovePHP
此类从包含Latin-1 Supplement、Latin Extended-A和Latin Extended-B特殊字符的字符串中删除变音符号。
用法:
来源:
The following description will be given in the following description:
ā
ƒǺǻǼǽǾǿ
拉丁语扩展附加
ẀẁẂ ẃ Ẅ ẅỲỳ
结果:
AAAAAAAECEEEEIIIIDNOOOOO× OUUUUYTHssaaaaaaeceeeeiIIIDnoooooo ÷ouuuuythy
AaAaAaCcCcCcCcDdDdEeEeEeEeEeGgGgGgGgGgHhHhIIIIIIIIIijJjKkLlLlLlLlLlNnNnNnNnNnNnOoOoOoOEoeRrRrRrRrSsSsSsTtTtTtUuUuUuUuUuUuUuWyyYZzZzZzs
fAaAEaeOo
拉丁语扩展附加
wwwwwwWYy
3pmvbmvn7#
这对我很有效。您可能需要编辑php.ini的第934行,其中显示
;extension=intl
删除分号。
nwlls2ji8#
解决这个问题的最通用的方法是使用Unicode Normalization,因为它可以自动处理所有口音-您不必预先准备列表。我不知道它是否容易在PHP中使用,我在C和Java中使用过它。从本质上讲,首先转换字符串,以便所有重音字符都由常规字符加上所谓的组合变音符号表示(内置或外部库应该提供此功能),然后删除组合变音符号(使用专用库,使用语言提供的字符属性或使用一些正则表达式扩展)。