【问题标题】:Unique slugs that, if fits with slug-1, slug-2... slug-n独特的 slug,如果适合 slug-1、slug-2... slug-n
【发布时间】:2011-04-21 05:25:00
【问题描述】:

我只使用 slug 来识别网站上的页面,例如:example.tld/view/this-fancy-slug。这是使用此功能自动从标题生成的:

public static function Normalize($str)
{
    $charset = "UTF-8";
    $separator = "-";

    $str = strtolower(htmlentities($str, ENT_COMPAT, $charset));
    $str = preg_replace('/&(.)(acute|cedil|circ|lig|grave|ring|tilde|uml);/', "$1", $str);
    $str = preg_replace('/([^a-z0-9]+)/', $separator, html_entity_decode($str, ENT_COMPAT, $charset));
    $str = trim($str, $separator);

    return $str;
}

这会返回一个完美的蛞蝓......但我需要独特的蛞蝓。所以我必须结合 mysql 来检查是否存在适合创建的 slug。没问题。

问题是,如果有 ONE slug,我想在最后添加 -1。但是如果添加 3 个相等的 slug 可能会出现问题,所以......我该如何管理这个从 slugslug-1slug-2slug-3...slug-100slug-n

提前谢谢你!

【问题讨论】:

    标签: php mysql slug


    【解决方案1】:

    不要只检查是否存在相同的蛞蝓。使用正则表达式计算遵循模式/(<base-regex-for-slug>)(-\d+)?/ 的所有 slug。因为您只允许使用字母数字,所以您上面的基本正则表达式将是 slug 本身。

    【讨论】:

    • 这个函数只给了我标题。在另一部分,MySQL 查询,我将不得不检查它。我不知道如何管理:检查 slug 是否返回 true,如果返回,检查最后一个数字是多少(NULL、-1、-2...)。
    • 这正是我的回答。使函数返回使用 slug 的次数。为此,您无需检查 SQL 中的完全匹配(LIKE 或 =),而是检查正则表达式模式 (RLIKE)。 dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp
    • 我不知道 RLIKE!谢谢! :)
    • 抱歉,Alin,我在实现它时遇到了一些麻烦。你能帮助我吗?我有两个条目:“lorem”和“lorem-1”(作为 news.slug)。我正在使用:SELECT id,slug FROM news WHERE slug RLIKE '/(lorem)(-\d+)?/' 并返回 0 行。我做的不对?提前谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 2021-09-21
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 2012-08-02
    相关资源
    最近更新 更多