UrlEncode 相關:php
URI所容許的字符分做保留與未保留. 保留字符是那些具備特殊含義的字符. 例如, 斜線字符用於URL (或者更通常的, URI)不一樣部分的分界符. 未保留字符沒有這些特殊含義. 百分號編碼把保留字符表示爲特殊字符序列. 上述情形隨URI與URI的不一樣版本規格會有輕微的變化.html
! |
* |
' |
( |
) |
; |
: |
@ |
& |
= |
+ |
$ |
, |
/ |
? |
# |
[ |
] |
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
|
a |
b |
c |
d |
e |
f |
g |
h |
i |
j |
k |
l |
m |
n |
o |
p |
q |
r |
s |
t |
u |
v |
w |
x |
y |
z |
|
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
- |
_ |
. |
~ |
保留字符:web
若是一個保留字符在特定上下文中具備特殊含義(稱做"reserved purpose") , 且URI中必須使用該字符用於其它目的, 那麼該字符必須百分號編碼。百分號編碼一個保留字符,首先須要把該字符的ASCII的值表示爲兩個16進制的數字,而後在其前面放置轉義字符("%
"),置入URI中的相應位置。(對於非ASCII字符, 須要轉換爲UTF-8字節序, 而後每一個字節按照上述方式表示。)數據庫
非保留字符:服務器
未保留字符不須要百分號編碼。兩個URI的差異若是僅是未保留字符是用百分號編碼仍是用字符自身表示,那麼這兩個URI具備等價的語義。但URI處理器實際上並不老是把兩者視做等價。 例如, URI的消費者不該該把"A
"與"A
", "~
"與"~
"視做不一樣, 可是某些URI的消費者就是這麼作了。 爲了最大的互操做性, URI的製造者不該該把未保留字符百分號編碼。app
當前標準:編碼
2005年1月發佈的RFC 3986,強制全部新的URI必須對未保留字符不加以百分號編碼;其它字符要先轉換爲UTF-8字節序列, 而後對其字節值使用百分號編碼。此前的URI不受此標準的影響。url
application/x-www-form-urlencoded類型:spa
當HTML表單中的數據被提交時,表單的域名與值被編碼並經過HTTP的GET或者POST方法甚至更古遠的email[2]把請求發送給服務器。這裏的編碼方法採用了一個很是早期的通用的URI百分號編碼方法,而且有不少小的修改如新行規範化以及把空格符的編碼" "替換爲"+
" 。 按這套方法編碼的數據的MIME類型是application/x-www-form-urlencoded
, 當前仍用於(雖然很是過期了)HTML與XForms規範中. 此外,CGI規範包括了web服務器如何解碼這類數據、利用這類數據的內容。若是發送的是HTTP GET請求, application/x-www-form-urlencoded數據包含在所請求URI的查詢成分中. 若是發送的是HTTP POST請求或經過email, 數據被放置在消息體中,媒體類型的名字被包含在消息的Content-Type頭內部。code
Base64 編碼:
轉碼範例: