【问题标题】:PHP creating slugify (clean URL) links in simple way? iconv malfunction?PHP以简单的方式创建slugify(干净的URL)链接? iconv 故障?
【发布时间】:2013-02-11 13:11:41
【问题描述】:

我认为这是 slugify 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

【问题讨论】:

  • 如果$str 包含例如%30(或任何其他 url 编码字符)?如果它包含在 URL 中无效但属于 ASCII 的字符怎么办?
  • 也许这更适合Code Review
  • 用于创建 SEO 友好的 url,在这种情况下看不到问题。但你是对的。如何提高效率?
  • 我不会依赖 iconv 来进行正确的音译。使用urlifysee this
  • @OneTrickPony 我认为这些是简单而出色的解决方案,但在网页上(不像门户网站或 cms 网站)不需要这么多的资源使用。我说得对吗?

标签: php url seo iconv clean-urls


【解决方案1】:

您之前的功能比响应中的功能好得多(更多案例)。问题在于语言环境。尝试在函数定义之前添加下一行:

setlocale(LC_ALL, 'es_ES.UTF8');

es_ES 是我的语言环境,但您的可能不同)。

【讨论】:

    【解决方案2】:

    谢谢! 最后这是我没有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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 2017-04-26
      相关资源
      最近更新 更多