我认为这是敲击网址的最简单方法。你有任何禁忌症吗?
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 library version 1.14
phpinfo()
启用iconv支持
iconv实现glibc
iconv库版本2.12
答案 0 :(得分:1)
您之前的功能比响应中的功能要好得多(更多情况)。问题出在语言环境中。尝试在函数定义之前添加下一行:
setlocale(LC_ALL, 'es_ES.UTF8');
( es_ES 是我的语言环境,但你的可能会有所不同。)
答案 1 :(得分:0)
谢谢! 最后,这是我没有buggy iconv()的解决方案:
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);
}