2011-11-07 40 views
0

我目前使用下面的代碼轉換我的琴絃,以搜索引擎友好的URL:PHP - 我怎樣才能用空格代替破折號?

 function url($url) { 
    $url = str_replace(" ", " ", $url); 
    $url = str_replace(array("'", "-"), "", $url); 
    $url = mb_convert_case($url, MB_CASE_LOWER, "UTF-8"); 
    $url = preg_replace("#[^a-zA-Z]+#", "-", $url); 
    $url = preg_replace("#(-){2,}#", "$1", $url); 
    $url = trim($url, "-"); 
     return $url; 
} 

當我查詢我的數據庫我該網址一致反對我的數據庫中的文章標題,我的問題是,在進行SEO後友好的網址功能的網址不匹配我的數據庫中的任何文章標題。

破折號(不知道小寫字母)的含義意味着它們與數據庫中的條目完全不同。

什麼是我的下一步,應該怎麼查詢數據庫之前刪除破折號,如果又如何?

或者是更好的做法,將文章ID包含在我的網址的某處並引用它?

+1

要加載您的文章,您需要先查詢數據庫。爲什麼不存儲ID然後通過ID訪問?訪問DB使用字符串比使用數字,特別是如果他們的PK方式慢。 – m0skit0

+0

這似乎是最好的選擇。歡呼聲 – hairynuggets

回答

2

查詢通過ID似乎遠遠快和simplier對我來說比再轉回到你的頭銜,使用URL rerwriting忽略標題(只是referencement)並調用一個頁面的id作爲一個GET參數。看着當前的URL讓我認爲StackOverflow是這樣工作的。

使用當前頁爲例,我懷疑

http://stackoverflow.com/questions/8034788/php-how-can-i-replace-dashes-with-spaces 

被改寫成類似

http://stackoverflow.com/questions.php?id=8034788 

其中一個簡單的SQL查詢獲取文章的內容。

+0

太好了。我會這樣做,謝謝。 – hairynuggets