【问题标题】:PHP - Is there a function to make clean URLs like Wordpress Permalinks? [duplicate]PHP - 有没有像 Wordpress 永久链接一样制作干净 URL 的功能? [复制]
【发布时间】:2012-09-29 02:06:36
【问题描述】:

可能重复:
Automatic clean and SEO friendly URL (slugs)

我需要一个像 Wordpress 一样制作“干净的 URL 字符串”的函数。 例如: “这是一个带有法语和 gêrmän 特殊字符 + 其他意思的字符串的字符串,我想将其用作 URL” 应转化为: "this-is-a-string-with-french-and-german-special-chars-other-mean-stuff-and-id-like-to-use-it-as-an-url"

请帮助我的懒惰,这已经是艰难的一天了:-)

【问题讨论】:

    标签: php


    【解决方案1】:

    在标题为 SEO 友好的 URL 下,有很多(很多)示例可用。

    http://www.intrepidstudios.com/blog/2009/2/10/function-to-generate-a-url-friendly-string.aspx

    function generateSlug($phrase, $maxLength)
    {
        $result = strtolower($phrase);
    
        $result = preg_replace("/[^a-z0-9\s-]/", "", $result);
        $result = trim(preg_replace("/[\s-]+/", " ", $result));
        $result = trim(substr($result, 0, $maxLength));
        $result = preg_replace("/\s/", "-", $result);
    
        return $result;
    }
    
    $title = "A bunch of ()/*++\'#@$&*^!%     invalid URL characters  ";
    
    echo(generateSlug($title));
    
    // outputs
    a-bunch-of-invalid-url-characters
    

    【讨论】:

    • 这是一个很好的简单方法。它的缺点是它会破坏其中包含变音字符的单词。例如mauvais Noël 变成mauvais-nol 这是没有意义的。
    【解决方案2】:

    我将通过提示你明天需要做什么来帮助你今天的懒惰:

    $final_string = str_replace(
        array(' ', 'ă', 'â', 'ä'),
        array('-', 'a', 'a', 'a'),
        $initial_string
    );
    

    这可能有很多变体,例如使用正则表达式 (preg_replace) 来匹配某些字符组,例如多个空格/制表符/换行符 (\s*) 或应该具有相同替换的多个字符 ( ă|â|ä)。

    $final_string = preg_replace(
        array('/\s*/', '/ă|â|ä/'),
        array('-', 'a'),
        $initial_string
    );
    

    【讨论】:

      【解决方案3】:

      vanialla PHP 函数最接近的结果是urlencode(),但它的输出与您问题中的示例不完全相同。

      例如:

      $my_string = strtolower(urlencode("This is a string with frénch and gêrmän special chars + other mean stuff and I'd like to use it as an URL"));
      echo $my_string;
      

      将产生:

      this+is+a+string+with+fr%e9nch+and+g%earm%e4n+special+chars+%2b+other+mean+stuff+and+i%27d+like+to+use+it+as+an+url
      

      不幸的是,要匹配 WordPress 的功能,您要么必须根据他们的算法编写一个函数,要么从头开始编写一个。

      【讨论】:

      • -1 IMO 这不能回答问题。 URL 编码是一种完全不同的方法 - WordPress 会清除任何非 URL 编码字符的 URL,因为它们将被替换为等效的十六进制代码 %27 等。
      • 是的,但请看我回答的最后一行。问题询问是否有一个函数可以在 PHP 中执行此操作。我的回答确实回答了……
      • 答案要么是干净的“否”要么是“是 - 但不是没有一点工作”,你的回答是“是的,但你不会得到你的例子所要求的”,这与回答“当然,使用 base64_encode(),不完全是你想要的,看起来有点丑,但它很干净,所有数据都在那里”一样好。
      • 如果您要对整个情况如此挑剔,那么我们是否也应该否决您的答案,因为它并不表示干净的yesno... ;-)
      • 在 StackOverflow 中,否决不是 100% 正确或错误的问题。这是一个见仁见智的问题。有些人(比如我)可能(有时)是挑剔者——这是真的。因此,您完全有权否决我的回答,并且拥有像您所说的那样可靠的论点,这非常好。 SO答案的真正下沉或游泳时刻是它们对OP的有用性。其他一切都是社区喋喋不休,有时可能是不公平的。但从统计上看,它分布均匀,形成了良好的控制/欣赏机制。
      猜你喜欢
      • 2015-06-10
      • 2017-07-27
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 2017-10-09
      • 1970-01-01
      • 2011-01-10
      相关资源
      最近更新 更多