最近碰到一個問題,當 url 內含+號 (plus sign)時
PHP會自動轉換成空白,做了一點調查才知道,
似乎 PHP 5 之後 PHP會自動 urldecode QUERY_STRING
照理講根據RFC 1738 +號不是unsafe的,可以留著
但是PHP的urlencode和rawurlencode有些許不同,
rawurlencode是根據RFC 1738所以加號不會處理掉
而 PHP 自己的 urlencode 會把空白 (space) 轉成 + 號 (plus sign)
而 PHP 自己的 urlencode 會把空白 (space) 轉成 + 號 (plus sign)
然後到 PHP 這邊自己會 urldecode 出來 + 號就變成空白了。至於
為什麼會這樣,PHP網站也語焉不詳,只說了一句 “historical reason”
事實上似乎 ASP 和 JAVA 也是這樣處理 urlencode 的
目前解法大概是
1.可能會有 + 號的地方用 urlencode 包一下(有用 base64_encode 的地方)
2.或是在接可能有 + 號的地方再 urlencode 一次
3.有的framework不使用$_GET 而自己去 parse query_string
1.可能會有 + 號的地方用 urlencode 包一下(有用 base64_encode 的地方)
2.或是在接可能有 + 號的地方再 urlencode 一次
3.有的framework不使用$_GET 而自己去 parse query_string