2010-06-06 53 views
1

我想從我的系統中的用戶標題創建slu URL網址。Slug ID的同名嗎?

如果用戶鍵入「最好的辦法的,爲變得苗條;!期」,那麼我想蛞蝓是「的條最佳的方式對獲得纖薄週期」。另外,如果有人已經創建了一個帶有這個標題的頁面,我希望這個slu to是「最好的方式得到苗條週期1」。

我的問題是如何在創建記錄之前檢查數據庫?好吧,顯然我將不得不在數據庫中執行檢查,然後寫入數據。這是2個查詢。這是正常的做法嗎?

此外,是否有用於過濾非字母/數字字符,並用連字符代替空格任何常規正則表達式?

任何幫助,非常感謝。

謝謝。

回答

0

要回答你的第一個問題:

是的,你將需要2個查詢/調用數據庫。沒有其他方法可以確定是否已經存在slu slu。顯然,如果在那裏已經有一個「1」的帖子,你可以安排你的查詢返回所有的項目,這樣你就知道你的新子彈使用了什麼號碼。

select count(*) from slugTable where slugTitle 
    like "the-best-ways-to-get-slim-period%" 

(顯然這僅用於說明的目的)。

這將返回0,如果新的鼻涕蟲是獨一無二的,或正值是否有任何現有的匹配。您可以直接使用此計數來設置您的新子彈:

if (selectCount > 0) 
{ 
    slugURL = postTitle + "-" + selectCount; 
} 

(同樣是僞代碼)。

0

隨着時間的推移我創造了這個功能使蛞蝓:

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個查詢。

相關問題