php url特殊符号处理,url参数中有+、空格、=、%、&等特殊符号的处置

url参数中有+、空格、=、%、&、#等特殊符号的处理

url参数中有+、空格、=、%、&、#等特殊符号的问题解决?

解决办法:

将这些字符转化成服务器可以识别的字符,对应关系如下:

URL字符转义

+ URL 中+号表示空格 %2B

空格 URL中的空格可以用+号或者编码 %20

/ 分隔目录和子目录 %2F

? 分隔实际的URL和参数 %3F

% 指定特殊字符 %25

# 表示书签 %23

& URL 中指定的参数间的分隔符 %26

= URL 中指定参数的值 %3D

看看实例:

(function(){

$("#btn_submit").click(function(){

$.post("index.php/Layout/urlDemo",{

id:2,

sex:'&male'

},function(data){

console.log("First post:"+data);

$.post("index.php/Layout/urlDemo?id=2&sex=&male",{},function(data){

console.log("Second post:"+data);

$.get("index.php/Layout/urlDemo",{

id:2,

sex:'&male'

},function(data){

console.log("First get:"+data);

$.get("index.php/Layout/urlDemo?id=2&sex=&male",{},function(data){

console.log("Second get:"+data);

});

});

});

});

});

})(jQuery);

PHP中Action:

class LayoutAction extends Action {

public function urlDemo(){

//此处PHP并没有执行解码

echo "id=".$_REQUEST['id'].";性别=".$_REQUEST['sex'];

}

}

结果如下图1:

152424226.jpg

转码后:

(function(){

$("#btn_submit").click(function(){

$.post("index.php/Layout/urlDemo",{

id:2,

sex:'&male'

},function(data){

console.log("First post:"+data);

$.post("index.php/Layout/urlDemo?id=2&sex="+encodeURIComponent('&male'),{},function(data){

console.log("Second post:"+data);

$.get("index.php/Layout/urlDemo",{

id:2,

sex:'&male'

},function(data){

console.log("First get:"+data);

$.get("index.php/Layout/urlDemo?id=2&sex="+encodeURIComponent('&male'),{},function(data){

console.log("Second get:"+data);

});

});

});

});

});

})(jQuery);

结果如下图2:

152424227.jpg

jQuery ajax封装的get()和post(),已经对特殊字符"&"等做了处理:

看看如下正则:

rprotocol = /^\/\//,

rquery = /\?/,

rscript = /

rselectTextarea = /^(?:select|textarea)/i,

rspacesAjax = /\s+/,

rts = /([?&])_=[^&]*/,

rurl = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/;

// try replacing _= if it is there

ret = s.url.replace(rts, "$1_=" + ts);

// if nothing was replaced, add timestamp to the end

s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&": "?") + "_=" + ts: "");

最后附:

javascript 编码和解码函数:

1)encodeURI():

a>主要用于整个URI

b>对空格进行编码

c>不会对本身属于URI的特殊字符进行编码,例如":","/","?","#"

2)encodeURIComponent():

a>主要用于URI中的某一段

b>会对发现的任何非标准字符进行编码

3)escape():

a>不会对 ASCII 字母和数字进行编码,

b>不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . /

c>其他所有的字符都会被转义序列替换。

d>ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。

//Visit%20W3@@@School%21

console.log(escape("Visit W3@@@School!"));

//%3F%21%3D%28%29%23%25%26

console.log(escape("?!=()#%&"))

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值