js和php中url编码转换:escape()、encodeuri()、encodeuricomponent()
escape() 方法:该方法不会对 ascii 字母和数字进行编码,也不会对下面这些 ascii 标点符号进行编码: - _ . ! ~ * ' ( ) 。
encodeuri() 方法:
该方法不会对 ascii 字母和数字进行编码,也不会对这些 ascii 标点符号进行编码: - _ . ! ~ * ' ( ) 。
该方法的目的是对 uri 进行完整的编码,因此对以下在 uri 中具有特殊含义的 ascii 标点符号,encodeuri() 函数是不会进行转义的:;/?:@&=+$,#
encodeuricomponent() 方法:该方法不会对 ascii 字母和数字进行编码,也不会对这些 ascii 标点符号进行编码: - _ . ! ~ * ' ( ) 。
其他字符(比如 :;/?:@&=+$,# 这些用于分隔 uri 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。
encodeuricomponent() 函数 与 encodeuri() 函数的区别之处:
前者假定它的参数是 uri 的一部分(比如协议、主机名、路径或查询字符串),因此 encodeuricomponent() 函数将转义用于分隔 uri 各个部分的标点符号。
总结:
通过对三个函数的分析,我们可以知道:escape()除了 ascii 字母、数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对url编码,最好不要使用此方法。
而encodeuri() 用于编码整个uri,因为uri中的合法字符都不会被编码转换。encodeuricomponent方法在编码单个uricomponent(指请求参数)应当是最常用的,它可以讲参数中的中文、特殊字符进行转义,而不会影响整个url。
here you can see how the various javascript and php functions apply to a range of common characters:
input javascript php
escape encodeuri encodeuricomponent urlencode rawurlencode htmlentities
%20 %20 %20 + %20
! %21 ! ! %21 %21 !
@ @ @ %40 %40 %40 @
# %23 # %23 %23 %23 #
$ %24 $ %24 %24 %24 $
% %25 %25 %25 %25 %25 %
^ %5e %5e %5e %5e %5e ^
& %26 & %26 %26 %26 &
* * * * %2a %2a *
( %28 ( ( %28 %28 (
) %29 ) ) %29 %29 )
- - - - - - -
_ _ _ _ _ _ _
= %3d = %3d %3d %3d =
+ + + %2b %2b %2b +
: %3a : %3a %3a %3a :
; %3b ; %3b %3b %3b; ;
. . . . . . .
%22 %22 %22 %22 %22
' %27 ' ' %27 %27 '
\ %5c %5c %5c %5c %5c \
/ / / %2f %2f %2f /
? %3f ? %3f %3f %3f ?
%3c %3c %3c %3c %3c <
> %3e %3e %3e %3e %3e >
~ %7e ~ ~ %7e %7e ~
[ %5b %5b %5b %5b %5b [
] %5d %5d %5d %5d %5d ]
{ %7b %7b %7b %7b %7b {
} %7d %7d %7d %7d %7d }
%60 %60 %60 %60 %60