PHP以简单的方式创建slugify(干净的URL)链接?iconv故障


PHP creating slugify (clean URL) links in simple way? iconv malfunction?

我认为这是清除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);
}