或多或少,你所描述的被称为slug,它通常是通过将最具描述性的字符串(通常是页面/帖子的标题)传递给slugify函数来构造的,如下所示:
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')), '-'));
}
Run Code Online (Sandbox Code Playgroud)
但问题是,结果可能不是唯一的,请考虑以下事项:
echo Slug('Alix Axel'); // alix-axel
echo Slug('Álix Ãxel'); // alix-axel
echo Slug('@Álix----_Ãxel!?!?'); // alix-axel
Run Code Online (Sandbox Code Playgroud)
即使输入不同,所有都返回相同的输出.我最喜欢(也是最普遍)的方法之一是像StackOverflow那样(使用ID和slug组合):
stackoverflow.com/questions/ 5845732/clean-urls-and-database
如果你想避免这种情况,你需要确保你生成的slug在数据库中已经不存在,如果它确实附加了一个递增的数字,直到它满足唯一条件.
| 归档时间: |
|
| 查看次数: |
522 次 |
| 最近记录: |