html%2b怎么转换成加号,Apache mod_rewrite%2B和加号(+)符号
不,這與引用的問題不完全相同。這里的問題特別是加號和Apache的答案:mod_rewrite:Spcaes& URL中的特殊字符無法正常工作。
斜杠也存在問題,請參閱http://httpd.apache.org/docs/current/mod/core.html#allowencodedslashes
(但你確實需要訪問Apache配置來執行此操作 - .htaccess不會這樣做)。
事實上,單獨使用重寫規則是不可能的。 Apache在重寫之前對URL進行解碼,但它不理解加號:http://example.com/a+b.html不會傳遞一個名為的文件
“a b.html”。
加號被PHP解碼為查詢字符串的$ _GET數組(或任何相關的語言機制),因為瀏覽器中的表單處理程序將它們放入。所以Apache會在應用重寫之前將%2B轉換為+,并保留+它本身就是一個意思,你無法區分它們。
當然,有人可能會爭辯說,用作空間的+在這些URL中根本就是無效的,而且應該只使用%20。但是,如果你無法控制生成它們,你一定會看到它們。瀏覽器不會自動生成它們。
答案是DIY,在許多方面它更可預測和更簡單:
RewriteRule。* index.php [L]
因此,一切都變成了index.php,并且沒有嘗試構造查詢字符串。如果您想要排除某些模式,例如那些有斜杠的,或者存在明確文件的那些,明顯的修改適用。例如
RewriteCond%{REQUEST_FILENAME}! - f
然后在index.php中
$ uri = substr($ _ SERVER ['REQUEST_URI'],1); //刪除前導斜杠
$ qmpos = strpos($ uri,'?'); //是否有問號,如果有的話
if($ qmpos!== FALSE){$ uri = substr($ uri,0,$ qmpos); } //僅在q.m之前的位
$ decoding = urldecode($ uri); //解碼URL之前的部分
if(!empty($ decoding)){$ _GET ['args'] = $ decoding; } //將結果添加到$ _GET
解碼原始請求(不包括前導斜杠 - 如果您在層次結構中更深層次會略有不同,但原理相同 - 并排除任何其他查詢字符串),并根據PHP的常規規則解碼args參數將它放入$ _GET,以便您可以通常的方式處理它與$ _GET查詢字符串參數的其余部分。
我認為這應該適用于空URL(http://example.com/)或僅包含查詢字符串(http://example.com/?foo=1)的URL,以及簡單的案例(http: //example.com/bar)以及帶有查詢字符串的案例(http://example.com/bar?foo=1)。毫無疑問,類似的方法適用于其他語言。
在您的特定情況下,您實際上根本不希望在PHP中解碼的優點。沒關系,請使用rawurldecode,而不是使用rawurldecode。
總結
以上是生活随笔為你收集整理的html%2b怎么转换成加号,Apache mod_rewrite%2B和加号(+)符号的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 打造自己的网络游戏[1]-Muddery
- 下一篇: 自制操作系统学习笔记(2)-汇编程序体验