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

时间:2013-02-11 13:11:41

标签: php url seo iconv clean-urls

我认为这是敲击网址的最简单方法。你有任何禁忌症吗?

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?

localhost上的

phpinfo()

  

启用iconv支持

     

iconv实现“libiconv”

     

iconv library version 1.14

服务器上的

phpinfo()

  

启用iconv支持

     

iconv实现glibc

     

iconv库版本2.12

2 个答案:

答案 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);
}