2012-08-10 31 views
0

我在這裏是新的,我需要你的幫助。 我開始玩.htaccess和PHP,我遇到了一個問題。 當進行url重寫時,我傳遞給url一個字符串,它是從數據庫中提取的文章的標題。問題在於字符串(標題)中有很多字符在URL中拼寫錯誤。 EG:localhost/news/php%5%是%out 這裏%是空格。我嘗試使用preg_replace格式化每個標題,並用' - '替換每個空格,但是有很多字符,我想知道是否有任何方法在沒有preg_replace的情況下執行此操作,因此任何字符串都可以用於查詢。 在news.php中,我從url中獲取字符串,並將其用於數據庫中的查詢,從中提取整個文章的正文。如何爲數據庫查詢格式url

RewriteRule ^news/([a-zA-Z0-9._]+)/?$ /news.php?news_title=$1 

這是我的.htaccess文件,以便在news.php我通過$ _GET獲得「news_title」變量,然後查詢數據庫,找到與該標題articol。 所以我的問題是,我做這一切都錯了嗎?有沒有其他的方式來做到這一點?我僅在兩天前開始使用htaccess,並希望讓我的網站更友好。 我希望我的問題很清楚。 感謝所有幫助我的人。

只是一個例子,這是我用改造正常平鋪在不會與符號變化的字符串(;放大器,%等)的URL

function generateUrl($url) { 

    $v1 = preg_replace("/[\s\:\;\,\_\'\`\"\?\!\%\(\)\+\=\#\@\[\]\{\}\/]/", "-", $url); 
    $v2= preg_replace('/[-]{2,}/', '-', $v1); 
    $v3 = preg_replace('/^[-]/', '', $v2); 
    $final = preg_replace('/[-]$/', '', $v3); 

    return $final; 
} 
+1

該字符類中實際需要轉義的唯一東西是'/'。我個人更喜歡這樣做:'$ urlSlug = trim(preg_replace('/ [\ W _] + /',' - ',$ urlSlug),' - ');'以便任何非字母字符序列變成單個'-' – DaveRandom 2012-08-10 14:40:19

回答

1

我認爲你的問題的答案在這裏URL Friendly Username in PHP?。當您將文章添加到表格中時,使用此功能(Slug)將文章標題和商店轉換後的標題轉換爲「slug」列。當用戶輸入地址(.....)/ article.php?name = some-title時,使用$ slug = $ _GET ['title']並通過slu find查找文章。在保存文章之前,您應該檢查是否存在具有此slu article的文章。如果存在添加到slug一些數字,然後保存到數據庫。您不能允許在表格中存在兩個具有相同slu record的記錄。

+0

謝謝你,那很有幫助。還有一件事情,有些角色喜歡'使功能不工作。 – Ovidiu 2012-08-10 15:29:24

+0

說實話,我沒有使用這個功能的任何問題。如果此功能對某些字符不起作用,請在使用功能之前替換這些字符。你也可以嘗試使用這個函數(http://www.intrepidstudios.com/blog/2009/2/10/function-to-generate-a-url-friendly-string.aspx),但我認爲第一個更好。 – mkey 2012-08-11 10:17:29