【问题标题】:How to generate URL slugs (SEO URLs) from raw input如何从原始输入生成 URL slugs (SEO URL)
【发布时间】:2014-03-29 08:22:37
【问题描述】:

现在,当用户在我的 php web 应用程序中点击一个链接时,他们会被发送到一个带有如下 URL 的页面:domain.com/faq/item/18483/domain.com/blog/item/37476。但是我想为这些 url 添加一个标题,这样用户就会知道链接背后的内容(例如:我与朋友分享了一个链接),如下所示:domain.com/faq/item/18483/I-have-a-question

如果我有这样的标题:

  • 这是一个常见问题项目
  • blog ®!@# message &hello&

清理并将它们转换为这种格式的最佳方法是什么:

  • 这是一个常见问题项目
  • 博客消息你好

实际上就像 stackoverflow 对我的标题所做的那样,我想创建这样的网址:http://stackoverflow.com/questions/22042539/how-to-generate-url-slugs-seo-urls-from-raw-input/

【问题讨论】:

标签: php url replace format


【解决方案1】:

您可以使用正则表达式将非字母数字的所有内容更改为连字符:

function slugify($string) {
    // Make the whole string lowercase
    $slug = strtolower($slug);
    // Replace utf-8 characters with 7-bit ASCII equivelants
    $slug = iconv("utf-8", "ascii//TRANSLIT", $input);
    // Replace any number of non-alphanumeric characters with hyphens
    $slug = preg_replace("/[^a-z0-9-]+/", "-", $string);
    // Remove any hyphens from the beginning & end of the string
    return trim($slug, "-");
}

您的示例字符串的输出是:

echo slugify("this is a faq item");         // this-is-a-faq-item
echo slugify("blog ®!@# message &hello&");  // blog-message-hello

【讨论】:

  • 哦刚刚试过这个:stackoverflow.com/questions/1432463/… 但你的答案仍然是正确的。
  • @sirwilliam 添加了更多步骤来小写 slug 并用它们的 7 位 ASCII 等效字符替换国际字符(重音符号、变音符号等)。
猜你喜欢
  • 2011-11-13
  • 1970-01-01
  • 2014-11-12
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
  • 1970-01-01
  • 2014-05-12
  • 2012-05-18
相关资源
最近更新 更多