Slug ID具有相同的名称?

时间:2010-06-06 22:04:33

标签: php mysql regex

我想从系统中的用户标题创建slug URL。

如果用户键入“最好的方式来减肥;期间!”,那么我希望slug成为“最好的方式来获得苗条的时期”。

另外,如果有人已经创建了一个带有该标题的页面,我希望slug成为“最好的方式来获得苗条的时期-1”。

我的问题是如何在创建记录之前检查数据库?好吧,显然我将不得不在数据库中执行检查,然后写入。这是2个查询。这是正常的做法吗?

此外,是否有任何传统的正则表达式用于过滤非字母/数字字符并用连字符替换空格?

非常感谢任何帮助。

感谢。

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个查询。