urlencode與rawurlencode函數是對url進行一些處理,但在處理時它們是有區別的,特別是對于些特殊字符時它們表現出來的是完全不一樣的,下面我就來詳細舉例子來說明一下這兩個url處理函數吧.
前段時間說自己遇到了個《URL加號引發錯誤》的BUG,引起這個bug的原因就是自己在URL中使用了 urlencode 函數,該函數會把空格轉換成加號,這樣就導致URL解析出錯,而空格只有轉換成 %20 才可以可以正常解析,這時我們就需要使用 rawurlencode 函數。下面就介紹一下 urlencode 函數與 rawurlencode 函數的區別.
urlencode 函數:
返回字符串,此字符串中除了 -_. 之外的所有非字母數字字符都將被替換成百分號(%)后跟兩位十六進制數,空格則編碼為加號(+),此編碼與 WWW 表單 POST 數據的編碼方式是一樣的,同時與 application/x-www-form-urlencoded 的媒體類型編碼方式一樣,由于歷史原因,此編碼在將空格編碼為加號(+)方面與 RFC1738 編碼(參見 rawurlencode())不同.
rawurlencode 函數:
返回字符串,此字符串中除了 -_. 之外的所有非字母數字字符都將被替換成百分號(%)后跟兩位十六進制數,這是在 » RFC 3986 中描述的編碼,是為了保護原義字符以免其被解釋為特殊的 URL 定界符,同時保護 URL 格式以免其被傳輸媒體(像一些郵件系統)使用字符轉換時弄亂,下面我們來看一下例子:
- <?php
- $string = "hello world";
- echo urlencode($string) . '<br/>'; //輸出:hello+world
- echo rawurldecode($string) . '<br/>';//輸出:hello%20world
- ?>
具體例子比較,代碼如下:
- <?php
- for ($i = 0x20; $i < 0x7f; $i++) {
- $str .= dechex($i);
- }
- $asscii = pack("H*",$str);
- echo "所有的可打印的asscii字符:(從空格到~)n". $asscii."/n";
- echo "urlencode 的結果:/n".urlencode($asscii);
- echo "/n";
- echo "urlencode 不做編碼的字符:/n".preg_replace("/%.{2}/","",urlencode($asscii));
- echo "/n";
- echo "rawurlencode 的結果:/n".rawurlencode($asscii);
- echo "/n";
- echo "rawurlencode 不做編碼的字符:/n".preg_replace("/%.{2}/","",rawurlencode($asscii));
- echo "/n";
- exit;
- ?>
- /*輸出結果:
- 所有的可打印的asscii字符:(從空格到~)
- !"#$%&’()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[/]^_abcdefghijklmnopqrstuvwxyz{|}~
- urlencode 的結果:
- +%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E
- urlencode 不做編碼的字符:
- +-.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
- rawurlencode 的結果:
- %20%21%22%23%24%25%26%27%28%29%2A%2B%2C-.%2F0123456789%3A%3B%3C%3D%3E%3F%40ABCDEFGHIJKLMNOPQRSTUVWXYZ%5B%5C%5D%5E_%60abcdefghijklmnopqrstuvwxyz%7B%7C%7D%7E
- rawurlencode 不做編碼的字符:
- -.0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz
- */
比較二者的結果:
1.數字、大小寫字母都不編碼
2.減號、點號、下劃線 三個不編碼
3.rawurlencode比urlencode多編碼一個”加號“
新聞熱點
疑難解答