url参数中有+、空格、=、%、&、#等特殊符号的问题解决?
解决办法:
将这些字符转化成服务器可以识别的字符,对应关系如下:
URL字符转义 + URL 中+号表示空格 %2B
空格 URL中的空格可以用+号或者编码 %20
/ 分隔目录和子目录 %2F
? 分隔实际的URL和参数 %3F
% 指定特殊字符 %25
# 表示书签 %23
& URL 中指定的参数间的分隔符 %26
= URL 中指定参数的值 %3D 看看实例:
<input type="button" value="aaa" id="btn_submit">
<script>
(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);
</script> PHP中Action:
class LayoutAction extends Action {
public function urlDemo(){
//此处PHP并没有执行解码
echo "id=".$_REQUEST['id'].";性别=".$_REQUEST['sex'];
}
}
结果如下图1:

转码后:
<script>
(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);
</script>
结果如下图2:

jQuery ajax封装的get()和post(),已经对特殊字符"&"等做了处理:
看看如下正则:
rprotocol = /^\/\//,
rquery = /\?/,
rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
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() 替代它。
<script type="text/javascript">
//Visit%20W3@@@School%21
console.log(escape("Visit W3@@@School!"));
//%3F%21%3D%28%29%23%25%26
console.log(escape("?!=()#%&"))
</script>

url参数中有+、空格、=、%、&、#等特殊符号的处理的更多相关文章

  1. shell脚本参数中有空格

    shell脚本参数中有空格 在shell脚本中如果有空格的处理如下: sh test.sh "hello word" echo $1 得到的是hello,而不是hello word ...

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

    url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它 ...

  3. get请求url参数中有+、空格、=、%、&、#等特殊符号的问题解决

    url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它 ...

  4. URL参数中有 特殊符号或加密数据 的问题解决

    url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它 ...

  5. Runtime.getRuntime().exec(...),当参数中有空格时!

    原以为不会有什么问题,但在测试时发现,问题大了. 如果想调用f:\mp3\i love you.mp3时, 我原以为正确的写法是: //在文件名前后加个双引号来解决文件名中有空格的情况 String ...

  6. Process.Start() 传递参数中有空格问题

    项目->   (工程名)属性-> 调试-> 命令行参数 1.在命令行下执行 参数之间用空格分隔开就可以了,如果参数有空格,以双引号风格 Test   aa   "bb   ...

  7. asp.net url参数中有中文request.querystring 乱码

    说明: 从这点我们发现:所有的参数输入,都调用了一次:HttpUtility.UrlDecode(str2, encoding); 结论出来了: 当客户端js对中文以utf-8编码提交到服务端时,用R ...

  8. url 参数的加号变成空格处理

    今天在调试客户端向服务器传递参数时,参数中的“+”全部变成了空格,原因是URL中默认的将“+”号转义了. 解决方法如下: 方法一.修改客户端 将客户端带“+”的参数中的“+”全部替换为‍“2B%”,这 ...

  9. url参数中出现+、空格、=、%、&、#等字符的解决办法

    url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,可能在服务器端无法获得正确的参数值,如何是好?解决办法将这些字符转化成服务器可以识别的字符,对应关系如下:URL字符转义 用其它 ...

随机推荐

  1. ASP.NET几种清除页面缓存的方法

    在asp.net中使用模式dialog时,你会发现每次打开的页面都是相同的内容,页面内容并没有刷新,这是缓存的原因造成的, 解决方法如下: 第一种是ASP.NET清除页面缓存 Response.Buf ...

  2. 状态开关按钮(ToggleButton)及按钮(Swich)的使用

    状态开关按钮(ToggleButton)和开关(Switch)也是由Button派生出来的,因此它们本质上都是按钮,Button支持的各种属性.方法也适用于ToggleButton和Switch.从功 ...

  3. 在eclipse中新建Dynamic web project时选择2.5和3.0的区别(里面涉及servlet和tomcat的问题)

    1.是指servlet的版本,是2.5的还是3.0的 servlet3.0以后支持异步 2.dynamic web module和对应的TOMCAT 版本 http://blog.sina.com.c ...

  4. exist的用法

    http://blog.csdn.net/maladoufu/article/details/8194624 http://blog.csdn.net/xiwu1616/article/details ...

  5. ajax省市线三级联动

    <script type='text/javascript' src='http://ajax.useso.com/ajax/libs/jquery/1.7.2/jquery.min.js?ve ...

  6. Get URL parameters & values with jQuery

    原文: http://jquery-howto.blogspot.jp/2009/09/get-url-parameters-values-with-jquery.html In this post, ...

  7. Qt中如何在QCursor移动的时候不触发moveEvent

    有时候有这样的需求,比如想对全局光标进行一次setPos(),但这个时候又不想触发消息队列触发mouseMoveEvent,这个时候就可以这么做. myWidget->clearFocus(); ...

  8. bash shell学习-实践 (自己实现一些小工具)

    The poor starve while the rich feast. "穷人饥肠辘辘,富人大吃大喝" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版)  Linux S ...

  9. Python自动化运维之18、Python操作 MySQL、pymysql、SQLAchemy

    一.MySQL 1.概述 什么是数据库 ? 答:数据的仓库,和Excel表中的行和列是差不多的,只是有各种约束和不同数据类型的表格 什么是 MySQL.Oracle.SQLite.Access.MS ...

  10. 使用Ajax.ActionLink时,点击对应的按钮会重新加载一个页面,而不是在当前页面的指定模块加载

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...