我正在学习 CodeIgniter 绝妙的文档中的教程。但是有一个术语经常被使用,那就是 "slug"。我已经四处查找了很多关于这个词的含义,但是仍然无法理解它是什么以及它是用来做什么的。以下是一个使用它的例子:
使用这段代码,您可以执行两个不同的查询。您可以获取所有新闻记录,或者通过它的 slug 获取一个新闻项目。
我正在学习 CodeIgniter 绝妙的文档中的教程。但是有一个术语经常被使用,那就是 "slug"。我已经四处查找了很多关于这个词的含义,但是仍然无法理解它是什么以及它是用来做什么的。以下是一个使用它的例子:
使用这段代码,您可以执行两个不同的查询。您可以获取所有新闻记录,或者通过它的 slug 获取一个新闻项目。
“Slug”是在访问资源时URL的一部分。比如你有一个URL像下面这样,显示你系统中的所有汽车:
http://localhost/cars
当您想在系统中引用特定的汽车时,您将提供以下URL:
http://localhost/cars/audi-a6/
注意URL仍然非常合乎逻辑,并且非常有利于SEO。至于使用slug,那就取决于您自己了。上面的audi-a6字符串可以是您系统中汽车的唯一标识符——假设您有一个关系型数据库,其中包含以下字段:
id
car_name
car_brand
car_unique_identifier
使用字段car_unique_identifier
来存储在slug中显示的值;例如,在我上面指定奥迪A6汽车的示例中,你的audi-a6字符串将存储在此处。
你也可以以其他方式使用它 - 例如,如果你有一个类似于博客的posts控制器。页面标题可能是slug,如果它是URL编码的话。对于我们的文章标题为“提高SEO的最佳方法”,你可以提供以下URL:
http://localhosts/posts/best-ways-to-make-seo-better
您需要对slug运行url_decode()
,然后您将获得字符串best ways to make seo better,您可以使用它来通过标题找到帖子。
这并不需要停止——您可以决定有多个slug来表示某些内容——让我们看看BBC如何做到这一点。我从今天的随机文章中选了一篇,它的URL如下:
http://www.bbc.co.uk/news/world-africa-24506006
这是一个链接,指向一篇名为《非洲联盟敦促国际刑事法院放弃对领导人的指控》的文章。BBC的做法是使用slug的最后部分world-africa-24506006,也就是24506006来在他们的系统中唯一标识一个条目。他们很可能使用world-africa来表示一个帖子所属的类别(虽然这只是一个假设,但它仍然是一个有根据的猜测)。
最后,让我们想象一下以下用于研究论文的数据库表格。
id
category
title
你可能有一个像下面这样工作的例子。http://localhost/papers
这个URL代表了系统中当前的所有研究论文。您可以通过以下slug访问所有物理学研究论文:
http://localhost/papers/physics
我们的Slug是物理,我们的数据库选择目前看起来像这样:
SELECT *
FROM papers
WHERE LOWER(papers.category) = 'physics'
接下来您可以公开以下网址:
http://localhost/papers/physics/gravitation
现在,我们的 slug 由物理和引力组成。我们背后的查询可能看起来像这样:
SELECT *
FROM papers
WHERE LOWER(papers.category) = 'physics'
AND LOWER(papers.title) = 'gravitation'
这使我们能够在系统中唯一地标识一个条目。
因此,我们已经反复使用 slug 来过滤我们的信息。在这个例子中,当我们没有使用任何 slug 运行 URL 时:
http://localhost/papers
我们希望列出所有可用的研究论文。当我们使用 physics Slug 运行 URL 时:
http://localhost/papers/physics
我们希望列出所有关于物理学的研究论文,从而缩小结果范围。最后,当我们提供了两个标识符时,我们就可以在系统中唯一地确定一个条目。
http://localhost/papers/physics/gravitation
我们可以用不同的方式进行建模吗?当然可以!根据我们系统的需求,我们可以对关系表进行规范化和反规范化。我们可以设置一个永久链接系统,这样我们的帖子表将如下所示:
id
title
permalink
那么,我们可能会有以下条目:
| 20013 | Gravitation | physics-gravitation-breakthrough |
因此暴露了URL:
http://localhost/papers/physics-gravitation-breakthrough
在上面的示例中,短链接 physics-gravitation-breakthrough 允许我们通过以下方式唯一地识别一篇文章: SELECT *
FROM papers
WHERE papers.permalink = physics-gravitation-breakthrough
简短回答
它是此问题URL中的what-is-a-slug
部分。
“slug”是一个与上下文有关的词汇,但在编程中或者就本问题而言,“slug”指的是URL。我们知道URL不能包含所有字符。因此,当任何文章、页面、控制器使用标题时,它们的slug被用作URL。这可能是自动派生的。
所以,总的来说,slug是任何名称的URL友好版本。
<?php
function create_slug($string){
$slug=preg_replace('/[^A-Za-z0-9-]+/', '-', $string);
return $slug;
}
echo create_slug('does this thing work or not');
//returns 'does-this-thing-work-or-not'
?>