可能重复:
How to handle diacritics (accents) when rewriting 'pretty URLs'
我想用“普通”字符(a-z和0-9之间的字符)替换特殊字符,例如ÅÄÖÜé。空格当然应该用短划线代替,但这不是一个真正的问题。
换句话说,我想转此:
enräksmörgås
进入这个:
烯raksmorgas
最好的方法是什么?
提前谢谢。
答案 0 :(得分:17)
您可以使用iconv
进行字符串替换...
$string = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $string);
基本上,它会transliterate它可以的字符,并删除它不能的字符(不在ASCII字符集中)......
然后,只需用str_replace
替换空格:
$string = str_replace(' ', '-', $string);
或者,如果你想获得幻想,你可以使用一个简单的正则表达式用一个破折号替换所有连续的空白字符:
$string = preg_replace('/\\s+/', '-', $string);
编辑正如@Robert Ros指出的那样,您需要在使用iconv
之前设置区域设置(取决于系统的默认值)。只需在iconv
行之前执行此行:
setlocale(LC_CTYPE, 'en_US.UTF8');
答案 1 :(得分:1)
查看http://php.net/manual/en/function.strtr.php
<?php
$addr = strtr($addr, "äåö", "aao");
?>
答案 2 :(得分:0)
经常用于此的聪明黑客是调用htmlentitites,然后运行
preg_replace('/&(\w)(acute|uml|circ|tilde|ring|grave);/', '\1', $str);
摆脱变音符号。更完整(但通常不必要的复杂)解决方案是使用Unicode分解算法来分割变音符号,然后删除不是ASCII字母或数字的所有内容。