URL编码

本文详细介绍了URL编码的规范,包括ASCII字符、非ASCII字符的编码方式,以及如何使用JavaScript中的encodeURI、decodeURI、encodeURIComponent和decodeURIComponent函数来处理URL。

一、"%编码"规范:( "%" 其后跟随两位的十六进制数,共256种)

1. ASCII字符ASCII 是7比特字符集,包含了128个不同的字符值。此处有127个,少了设备控制字符中的DEL

    • 非转义字符:不编码;

ASCII 字符

URL-编码

!

%21

'

%27

(

%28

)

%29

*

%2A

-

%2D

.

%2E

0

%30

1

%31

2

%32

3

%33

4

%34

5

%35

6

%36

7

%37

8

%38

9

%39

A

%41

B

%42

C

%43

D

%44

E

%45

F

%46

G

%47

H

%48

I

%49

J

%4A

K

%4B

L

%4C

M

%4D

N

%4E

O

%4F

P

%50

Q

%51

R

%52

S

%53

T

%54

U

%55

V

%56

W

%57

X

%58

Y

%59

Z

%5A

_

%5F

a

%61

b

%62

c

%63

d

%64

e

%65

f

%66

g

%67

h

%68

i

%69

j

%6A

k

%6B

l

%6C

m

%6D

n

%6E

o

%6F

p

%70

q

%71

r

%72

s

%73

t

%74

u

%75

v

%76

w

%77

x

%78

y

%79

z

%7A

~

%7E

   

    • 保留字符encodeURIComponent()编码,encodeURI()不编码

ASCII 字符

URL-编码

$

%24

&

%26

+

%2B

,

%2C

/

%2F

:

%3A

;

%3B

=

%3D

?

%3F

@

%40

 

        编码原因

 

        • 保留字具有特殊的含义。如"&"表示参数分隔符,"="表示参数keyvalue的连接
        • 如果 value 字符串本身包含了 = 或者 & ,如宝洁公司的简称为P&G,假设需要当做参数去传递,那么可能URL所带参数可能会是这样 ?name=P&G&t=1450591802326,因为参数中多了一个&势必会造成接收 URL 的服务器解析错误,因此必须将引起歧义的 & 和 = 符号进行转义, 也就是对其进行编码。
    • 数字符号encodeURIComponent()编码,encodeURI()不编码

ASCII 字符

URL-编码

#

%23

    • 其他字符:编码

ASCII 字符

URL-编码

space

%20

"

%22

%

%25

<

%3C

>

%3E

[

%5B

\

%5C

]

%5D

^

%5E

`

%60

{

%7B

|

%7C

}

%7D

ASCII 设备控制字符

描述

URL-编码

NUL

null character

%00

SOH

start of header

%01

STX

start of text

%02

ETX

end of text

%03

EOT

end of transmission

%04

ENQ

enquiry

%05

ACK

acknowledge

%06

BEL

bell (ring)

%07

BS

backspace

%08

HT

horizontal tab

%09

LF

line feed

%0A

VT

vertical tab

%0B

FF

form feed

%0C

CR

carriage return

%0D

SO

shift out

%0E

SI

shift in

%0F

DLE

data link escape

%10

DC1

device control 1

%11

DC2

device control 2

%12

DC3

device control 3

%13

DC4

device control 4

%14

NAK

negative acknowledge

%15

SYN

synchronize

%16

ETB

end transmission block

%17

CAN

cancel

%18

EM

end of medium

%19

SUB

substitute

%1A

ESC

escape

%1B

FS

file separator

%1C

GS

group separator

%1D

RS

record separator

%1E

US

unit separator

%1F

   

2. 非ASCII字符(129个):取其Unicode内码,然后加上"%"前缀将该字符进行编码

非ASCII 字符

URL-编码

  

%7F

`

%80

%81

%82

ƒ

%83

"

%84

%85

%86

%87

ˆ

%88

%89

Š

%8A

%8B

Œ

%8C

%8D

Ž

%8E

%8F

%90

'

%91

'

%92

"

%93

"

%94

%95

%96

%97

˜

%98

%99

š

%9A

%9B

œ

%9C

%9D

ž

%9E

Ÿ

%9F

  

%A0

¡

%A1

¢

%A2

£

%A3

¤

%A4

¥

%A5

¦

%A6

§

%A7

¨

%A8

©

%A9

ª

%AA

«

%AB

¬

%AC

  

%AD

®

%AE

¯

%AF

°

%B0

±

%B1

²

%B2

³

%B3

´

%B4

µ

%B5

%B6

·

%B7

¸

%B8

¹

%B9

º

%BA

»

%BB

¼

%BC

½

%BD

¾

%BE

¿

%BF

À

%C0

Á

%C1

Â

%C2

Ã

%C3

Ä

%C4

Å

%C5

Æ

%C6

Ç

%C7

È

%C8

É

%C9

Ê

%CA

Ë

%CB

Ì

%CC

Í

%CD

Î

%CE

Ï

%CF

Ð

%D0

Ñ

%D1

Ò

%D2

Ó

%D3

Ô

%D4

Õ

%D5

Ö

%D6

×

%D7

Ø

%D8

Ù

%D9

Ú

%DA

Û

%DB

Ü

%DC

Ý

%DD

Þ

%DE

ß

%DF

à

%E0

á

%E1

â

%E2

ã

%E3

ä

%E4

å

%E5

æ

%E6

ç

%E7

è

%E8

é

%E9

ê

%EA

ë

%EB

ì

%EC

í

%ED

î

%EE

ï

%EF

ð

%F0

ñ

%F1

ò

%F2

ó

%F3

ô

%F4

õ

%F5

ö

%F6

÷

%F7

ø

%F8

ù

%F9

ú

%FA

û

%FB

ü

%FC

ý

%FD

þ

%FE

ÿ

%FF

   

   

二、相关函数

1.  encodeURI()

  • 对一个完整的URI进行编码对除“非转义字符”、“保留字符”、“数字符号”以外的字符编码
    • 原因:URI是完整的URI,无需对那些保留的并且在URI中有特殊意思的字符进行编码。
    • encodeURI 自身无法产生能适用于HTTP GET 或 POST 请求的URI,例如对于 XMLHTTPRequests, 因为 "&", "+", 和 "=" 等保留字符不会被编码,然而在 GET 和 POST 请求中它们是特殊字符。此时,encodeURIComponent方法可以对这些字符编码。
  • 语法:
    • encodeURI(URI)
      • 参数URI:一个完整的URI
  • 例:

encodeURI("http://www.cnblogs.com/season-huang/some other thing");

//"http://www.cnblogs.com/season-huang/some%20other%20thing";

 

2. decodeURI()

  • 将已编码 URI 中所有能识别的转义序列转换成原字符,但不能解码那些不会被 encodeURI 编码的内容(例如 "#")
  • 语法:
    • decodeURI(encodedURI)
      • 参数encodedURI:一个完整的编码过的URI

3. encodeURIComponent()

  • 对URI的组成部分进行编码
  • 作用:对 URL 中的参数进行编码,而不是对整个 URL 进行编码
  • 对除“非转义字符”以外的字符编码(包括“保留字符”、“数字符号”)
  • 语法:
    • encodeURIComponent(str)
      • 参数str:字符串,URI 的组成部分
  • 例:
    • 错误的用法:

var URL = "http://www.a.com?foo=http://www.b.com?t=123&s=456";

encodeURIComponent(URL);

// "http%3A%2F%2Fwww.a.com%3Ffoo%3Dhttp%3A%2F%2Fwww.b.com%3Ft%3D123%26s%3D456"

 

    • 正确的用法:

var param = "http://www.b.com?t=123&s=456"; // 要被编码的参数

URL = "http://www.a.com?foo="+encodeURIComponent(param);

//"http://www.a.com?foo=http%3A%2F%2Fwww.b.com%3Ft%3D123%26s%3D456"

 

4. decodeURIComponent()

  • 用于解码由 encodeURIComponent 方法或者其它类似方法编码的部分
  • 语法:
    • decodeURIComponent(encodedURI)
      • 参数encodedURI:编码后的部分URI

转载于:https://www.cnblogs.com/xuehaoyue/p/6624306.html

### URL编码的使用方法及规则 URL编码(Percent-Encoding)是一种用于在URL中传输特殊字符的编码方式。由于URL只能使用有限的字符集(主要是ASCII字符),而实际应用中可能包含许多特殊字符(如空格、中文字符、标点符号等),URL编码通过将这些特殊字符转换为可传输的格式,确保了URL的正确性和安全性[^1]。 #### 编码规则 URL编码遵循以下规则: 1. 非字母数字字符会被替换为 `%` 后跟两个表示字符ASCII值的十六进制数字。例如,空格会被编码为 `%20`。 2. 某些保留字符(如 `&`, `=`, `?` 等)即使属于ASCII字符集,也会被编码以避免歧义。例如,`&` 会被编码为 `%26`。 3. 对于非ASCII字符(如中文字符),通常先将其转换为UTF-8字节序列,然后对每个字节进行百分号编码。例如,中文字符“你好”在UTF-8编码下会被转换为 `%E4%BD%A0%E5%A5%BD`[^2]。 #### 使用方法 URL编码广泛应用于以下场景: 1. **URI/URL**:当需要在URL中传递参数时,所有特殊字符都需要进行URL编码[^3]。 2. **表单提交**:当浏览器提交表单时,会根据请求体格式 `application/x-www-form-urlencoded` 对表单数据进行编码。具体规则如下: - 每对 `name/value` 参数由 `&` 符号分隔。 - 每个 `name` 和对应的 `value` 由 `=` 符号分隔。 - 如果用户没有输入值给某个 `name`,则该 `name` 仍会出现,但无值[^4]。 #### 示例代码 以下是一个简单的Python示例,展示如何对字符串进行URL编码: ```python import urllib.parse # 原始字符串 original_string = "Hello, 你好! This is a test." # 使用urllib库进行URL编码 encoded_string = urllib.parse.quote(original_string) print("原始字符串:", original_string) print("URL编码后的字符串:", encoded_string) ``` 运行结果: ``` 原始字符串: Hello, 你好! This is a test. URL编码后的字符串: Hello%2C+%E4%BD%A0%E5%A5%BD%21+This+is+a+test. ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值