2010-10-05 41 views
0

我只使用slu to識別網站上的一個頁面,如:example.tld/view/this-fancy-slug。這是從標題自動與此函數生成:獨特的slu that,如果適合slug-1,slug-2 ... slug-n

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。沒有問題。

問題是我想在最後添加一個-1,如果有一個slug。但可以越野車,如果加3個等於蛞蝓所以...我如何管理這個從,去鼻涕蟲1塞-2鼻涕蟲3 ... 塞-100,slug-n

預先感謝您!

回答

1

不要只檢查是否存在相同的slu slu。使用正則表達式來計算所有遵循/(<base-regex-for-slug>)(-\d+)?/模式的slu count。因爲你只允許字母數字你上面的基本正則表達式本身就是slu re。

+0

這個函數只給了我標題爲slu g。在另一部分中,MySQL查詢,我必須檢查它。我不知道如何管理:檢查slug是否返回true,如果返回,請檢查最後一個數字是什麼(NULL,-1,-2 ...)。 – ipalaus 2010-10-05 10:22:11

+1

這正是我回答的問題。使函數返回使用slu number的次數。要做到這一點,你不要檢查SQL(LIKE或=)中的完全匹配,但檢查正則表達式模式(RLIKE)。 http://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp – 2010-10-05 10:40:21

+0

我不知道RLIKE!謝謝! :) – ipalaus 2010-10-05 13:02:30