鍍金池/ 問(wèn)答/Java  PHP/ java URLEncoder.encode 和 PHP urlencode

java URLEncoder.encode 和 PHP urlencode 是一樣的嗎?

java URLEncoder.encode 和 PHP urlencode 是一樣的嗎?

如何不是 那么他和那個(gè)PHP函數(shù)有同樣的效果呢 謝謝

回答
編輯回答
安若晴

一樣的,都是用于url的編碼

2017年7月5日 08:37
編輯回答
貓館

其實(shí)是有區(qū)別的,php的urlencode會(huì)把星號(hào)*轉(zhuǎn)為%2A, java的則保留。以前對(duì)接接口的時(shí)候踩過(guò)這個(gè)坑,因?yàn)閡rlencode結(jié)果不一致導(dǎo)致驗(yàn)簽不通過(guò)

以下是php和java對(duì)RFC2396規(guī)定的9個(gè)非保留符號(hào)的處理結(jié)果,可以看到對(duì)*和~的處理存在區(qū)別
php
java

RFC2396對(duì)非保留字符的說(shuō)明

Data characters that are allowed in a URI but do not have a reserved
purpose are called unreserved. These include upper and lower case
letters, decimal digits, and a limited set of punctuation marks and
symbols.

 unreserved  = alphanum | mark

 mark        = "-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
 

Unreserved characters can be escaped without changing the semantics
of the URI, but this should not be done unless the URI is being used
in a context that does not allow the unescaped character to appear.


補(bǔ)充

上面PHP截圖里不小心寫(xiě)成rawurlencode了,既然問(wèn)的是urlencode, 有必要補(bǔ)充一下urlencode的執(zhí)行結(jié)果
php urlencode

可見(jiàn)urlencode與URLEncoder在對(duì)非保留字符處理的區(qū)別僅體現(xiàn)在符號(hào)"*"上。
值得注意的是百度搜索搜“urlencode與rawurlencode的區(qū)別”,搜出來(lái)的博文基本只提到了對(duì)"+"處理的區(qū)別,并未提到“~

以上代碼運(yùn)行結(jié)果基于某在線工具,未排除運(yùn)行在不同環(huán)境(語(yǔ)言版本)下結(jié)果不一致的可能性

2017年5月20日 01:41