我想从系统中的用户标题创建slug URL。
如果用户键入“最好的方式来减肥;期间!”,那么我希望slug成为“最好的方式来获得苗条的时期”。
另外,如果有人已经创建了一个带有该标题的页面,我希望slug成为“最好的方式来获得苗条的时期-1”。
我的问题是如何在创建记录之前检查数据库?好吧,显然我将不得不在数据库中执行检查,然后写入。这是2个查询。这是正常的做法吗?
此外,是否有任何传统的正则表达式用于过滤非字母/数字字符并用连字符替换空格?
非常感谢任何帮助。
感谢。
答案 0 :(得分:0)
回答你的第一个问题:
是的,您将需要对数据库进行2次查询/调用。没有其他方法可以发现slu is是否已经存在。显然,如果那里已经有一个“1”帖子,你可以安排你的查询返回所有项目,这样你就知道你的新slug会使用什么号码。
select count(*) from slugTable where slugTitle
like "the-best-ways-to-get-slim-period%"
(显然这仅用于说明目的)。
如果新的slug是唯一的,则返回0,如果存在任何匹配,则返回正值。您可以直接使用此计数来设置新的slug:
if (selectCount > 0)
{
slugURL = postTitle + "-" + selectCount;
}
(再次伪代码)。
答案 1 :(得分:0)
随着时间的推移,我创建了这个函数来制作slu ::
function filter($string)
{
$search = array('`', '"', "'", ' ', '.');
$replace = array('', '', '', '-', '-');
$table = array(
'Š'=>'S', 'š'=>'s', 'Đ'=>'Dj', 'đ'=>'dj', 'Ž'=>'Z', 'ž'=>'z', 'Č'=>'C', 'č'=>'c', 'Ć'=>'C', 'ć'=>'c',
'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
'ÿ'=>'y', 'Ŕ'=>'R', 'ŕ'=>'r',
);
$string = strtr($string, $table);
$string = preg_replace('/[^a-zA-Z0-9_-]/', '-', $string);
$string = preg_replace('/-+/', '-', $string);
return trim($string, '-');
}
至于第一部分,你需要2个查询。