2012-06-19 48 views
0

我正在使用mod_rewrite,並使用頁面標題例如關於我們已在內容管理系統,而不是index.php文件中輸入?頁= 1在網址中,有什麼更好的替代空間,+或破折號? url encode does +,谷歌推薦破折號

所以我有一個規則

RewriteRule  ^pages/([A-Za-z0-9\-]+).php?$ index.php?page=$1     [NC,L] # Handle site navigation 

這將好看的URL www.domain.com /pages/About-Us.php併發送請求到www.domain.com/index.php?page=About-Us

但是,url編碼爲空格加上了一個加號,所以如果我查詢About-Us,顯然不工作,因爲我應該查詢的是domain.com/About+Us.php

我想使用About-U s.php版本,我如何獲得URL編碼來處理我的空間與 - 而不是+?

豐富:)

回答

3

urlencode()是用於查詢參數只(一切?後去)。 +是URL的查詢部分內的特殊字符,表示文字空間;文字+字符需要百分比編碼。 rawurlencode()適用於所有其他URL部分,並且不會將空間編碼爲+

另一方面,虛線不是特殊字符,並直接在URL中表示自己。

您尚未指定您正在使用的CMS,或者它是您自己的內部解決方案,但是您想要做的是在URL中使用slugs而不是實際的頁面標題。

大多數CMS通過將標題轉換爲小寫字母並用破折號替換空格和標點符號,在創建時爲每個頁面自動創建一個slu slu。理想情況下,這個slug應該是數據庫中的一個實際字段,以便在需要時可以手動覆蓋它。當你生成你的頁面的鏈接時,你可以在URL中包含它們的內容,當你得到一個頁面的請求時,你可以用數據庫而不是標題在數據庫中查看它。

+0

以及它是我自己的CMS,並且用戶輸入了關於我們和特別優惠這樣的頁面標題,這是數據庫中的內容。所以當我編寫導航欄的時候,我應該做一些preg_replace或者其他的東西並且把空間換成短劃線? – Rich

+0

對,我明白了。說得通。謝謝@lanzz – Rich