清理网址和数据库

时间:2011-05-01 01:21:45

标签: php database url

在我的数据库中有一个URL列是否可以存储URL,例如:/ this-is-a-keyword

然后在我的php查询中使用该列来获取我需要的信息而不是使用整数列?

所以基本上当我去Mysite.com/ 这是一个关键字时,我会从该行返回结果。

2 个答案:

答案 0 :(得分:5)

或多或少,您所描述的内容称为slug,它通常是通过将最具描述性的字符串(通常是页面/帖子的标题)传递给slugify函数like this one来构造的:

function Slug($string)
{
    return strtolower(trim(preg_replace('~[^0-9a-z]+~i', '-', html_entity_decode(preg_replace('~&([a-z]{1,2})(?:acute|cedil|circ|grave|lig|orn|ring|slash|th|tilde|uml);~i', '$1', htmlentities($string, ENT_QUOTES, 'UTF-8')), ENT_QUOTES, 'UTF-8')), '-'));
}

然而,问题在于结果可能不是唯一的,请考虑以下事项:

echo Slug('Alix Axel');          // alix-axel
echo Slug('Álix Ãxel');          // alix-axel
echo Slug('@Álix----_Ãxel!?!?'); // alix-axel

即使输入不同,也会返回相同的输出。我最喜欢(也是最普遍)的方法之一是像StackOverflow那样(使用ID和slug组合):

  

stackoverflow.com/questions/的 5845732 / <强> 干净的URL和 - 数据库

如果你想避免这种情况,你需要确保你生成的slug在数据库中已经不存在,如果它确实附加了一个递增的数字,直到它满足唯一条件。

答案 1 :(得分:3)

嗯,当然,这通常称为slug。并且您只需将this-is-a-keyword存储在数据库中(无前导斜杠)以进行查询。