我认为这是清除url的最简单方法。你有禁忌症吗?
function url_clean($str)
{
$str = iconv('utf-8', 'us-ascii//TRANSLIT', $str);
$clean_str = preg_replace(array(
'/''|'"/',
'/ /'
) , array(
'',
'-'
) , $str);
return $clean_str;
}
更新
上面的代码在本地运行得很好,但在服务器上返回的字符串是?
,而不是音译字符:árvíztűrő
->?rv?zt?r?
本地主机上的phpinfo()
支持iconv的
iconv实现"libiconv"
iconv库1.14版
服务器上的phpinfo()
支持iconv的
iconv实现glibc
iconv库2.12版
您以前的函数比响应中的函数好得多(更多情况)。问题出在区域设置上。尝试在函数定义之前添加下一行:
setlocale(LC_ALL, 'es_ES.UTF8');
(es_es是我的语言环境,但您的语言环境可能不同)。
谢谢!最后,这是我没有那个bug图标的解决方案():
function url_clean($str) {
$accent = array(' ','ű','á','é','ú','ő','ó','ü','ö','í','Ű','Á','É','Ú','Ő','Ó','Ü','Ö','Í');
$clean = array('-','u','a','e','u','o','o','u','o','i','U','A','E','U','O','O','U','O','I');
$str = str_replace($accent, $clean, $str);
return preg_replace('/[^A-Za-z0-9-.]/', '', $str);
}