相关问题:
与上述问题类似,我正在寻找一种可靠、健壮的方式来使用PHP将任何Unicode字符转换为近似等效的ASCII字符。 我真的不想自己编写查找表。
例如(从第一个引用的问题中窃取):Gračišće
变成 Gracisce
相关问题:
与上述问题类似,我正在寻找一种可靠、健壮的方式来使用PHP将任何Unicode字符转换为近似等效的ASCII字符。 我真的不想自己编写查找表。
例如(从第一个引用的问题中窃取):Gračišće
变成 Gracisce
Notice: iconv() [function.iconv]: Wrong charset, conversion from `UTF-8' to `ASCII//TRANSLIT//IGNORE' is not allowed in D:\www\phpcommand.php(11) : eval()'d code on line 3
//IGNORE
后,我得到了:Gr'a'e~a~o^O"ucisce
所以,字符š
被正确翻译了,但其他字符没有。
对我有用的解决方案是使用preg_replace
(删除除[a-zA-Z0-9]之外的所有内容,包括空格)和@zombat的解决方案的混合:
preg_replace('/[^a-zA-Z0-9.]/','',iconv('UTF-8', 'ASCII//TRANSLIT', "GráéãõÔücišce"));
输出:
GraeaoOucisce
transliterator_transliterate('Any-Latin; Latin-ASCII; Lower()', "ÀÖØöøįĴőŔžǍǰǴǵǸțȞȟȤȳɃɆɏ");
//Will output
aooooijorzajggnthhzybey
我的解决方案是创建两个字符串——第一个包含不需要的字母,第二个包含将替换第一个字符串的字母。
$from = 'čšć';
$to = 'csc';
$text = 'Gračišće';
$result = str_replace(str_split($from), str_split($to), $text);
试试这个:
function normal_chars($string)
{
$string = htmlentities($string, ENT_QUOTES, 'UTF-8');
$string = preg_replace('~&([a-z]{1,2})(acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', $string);
$string = preg_replace(array('~[^0-9a-z]~i', '~-+~'), ' ', $string);
return trim($string);
}
Examples:
echo normal_chars('Álix----_Ãxel!?!?'); // Alix Axel
echo normal_chars('áéíóúÁÉÍÓÚ'); // aeiouAEIOU
echo normal_chars('üÿÄËÏÖÜŸåÅ'); // uyAEIOUYaA
根据此线程中所选的答案:如何在PHP中创建URL友好的用户名?
setlocale(LC_ALL, "en_US.UTF-8")
。 - Mike