在传参时,url参数中包含+、空格、=、%、&、#等特殊符号的处理

最近在工作中遇到一些问题,就是如果表单中填写一些特殊字符,使用url向后台传参的时候会遇到问题,就是比如"#$%^&*()+"等特殊字符传不到后台,查了一些资料,整理下,供参考

首先可以先将特殊字符转码为16进制的对应的转码为

  1. url参数中有+、空格、=、%、&、#等特殊符号的问题解决?
  2. 解决办法:
  3. 将这些字符转化成服务器可以识别的字符,对应关系如下:
  4. URL字符转义
  5. +URL中+号表示空格%2B
  6. 空格URL中的空格可以用+号或者编码%20
  7. /分隔目录和子目录%2F
  8. ?分隔实际的URL和参数%3F
  9. %指定特殊字符%25
  10. #表示书签%23
  11. &URL中指定的参数间的分隔符%26
  12. =URL中指定参数的值%3D
  13. 看看实例:
  14. <inputtype="button"value="aaa"id="btn_submit">
  15. <script>
  16. (function(){
  17. $("#btn_submit").click(function(){
  18. $.post("index.php/Layout/urlDemo",{
  19. id:2,
  20. sex:'&male'
  21. },function(data){
  22. console.log("Firstpost:"+data);
  23. $.post("index.php/Layout/urlDemo?id=2&sex=&male",{},function(data){
  24. console.log("Secondpost:"+data);
  25. $.get("index.php/Layout/urlDemo",{
  26. id:2,
  27. sex:'&male'
  28. },function(data){
  29. console.log("Firstget:"+data);
  30. $.get("index.php/Layout/urlDemo?id=2&sex=&male",{},function(data){
  31. console.log("Secondget:"+data);
  32. });
  33. });
  34. });
  35. });
  36. });
  37. })(jQuery);
  38. </script>
  39. PHP中Action:
  40. classLayoutActionextendsAction{
  41. publicfunctionurlDemo(){
  42. //此处PHP并没有执行解码
  43. echo"id=".$_REQUEST['id'].";性别=".$_REQUEST['sex'];
  44. }
  45. }
  46. 结果如下图1:


  1. 转码后:
  2. <script>
  3. (function(){
  4. $("#btn_submit").click(function(){
  5. $.post("index.php/Layout/urlDemo",{
  6. id:2,
  7. sex:'&male'
  8. },function(data){
  9. console.log("Firstpost:"+data);
  10. $.post("index.php/Layout/urlDemo?id=2&sex="+encodeURIComponent('&male'),{},function(data){
  11. console.log("Secondpost:"+data);
  12. $.get("index.php/Layout/urlDemo",{
  13. id:2,
  14. sex:'&male'
  15. },function(data){
  16. console.log("Firstget:"+data);
  17. $.get("index.php/Layout/urlDemo?id=2&sex="+encodeURIComponent('&male'),{},function(data){
  18. console.log("Secondget:"+data);
  19. });
  20. });
  21. });
  22. });
  23. });
  24. })(jQuery);
  25. </script>
  26. 结果如下图2:


  1. jQueryajax封装的get()和post(),已经对特殊字符"&"等做了处理:
  2. 看看如下正则:
  3. rprotocol=/^\/\//,
  4. rquery=/\?/,
  5. rscript=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
  6. rselectTextarea=/^(?:select|textarea)/i,
  7. rspacesAjax=/\s+/,
  8. rts=/([?&])_=[^&]*/,
  9. rurl=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/;
  10. //tryreplacing_=ifitisthere
  11. ret=s.url.replace(rts,"$1_="+ts);
  12. //ifnothingwasreplaced,addtimestamptotheend
  13. s.url=ret+((ret===s.url)?(rquery.test(s.url)?"&":"?")+"_="+ts:"");
  14. 最后附:
  15. javascript编码和解码函数:
  16. 1)encodeURI():
  17. a>主要用于整个URI
  18. b>对空格进行编码
  19. c>不会对本身属于URI的特殊字符进行编码,例如":","/","?","#"
  20. 2)encodeURIComponent():
  21. a>主要用于URI中的某一段
  22. b>会对发现的任何非标准字符进行编码
  23. 3)escape():
  24. a>不会对ASCII字母和数字进行编码,
  25. b>不会对下面这些ASCII标点符号进行编码:*@-_+./
  26. c>其他所有的字符都会被转义序列替换。
  27. d>ECMAScriptv3反对使用该方法,应用使用decodeURI()和decodeURIComponent()替代它。
  28. <scripttype="text/javascript">
  29. //Visit%20W3@@@School%21
  30. console.log(escape("VisitW3@@@School!"));
  31. //%3F%21%3D%28%29%23%25%26
  32. console.log(escape("?!=()#%&"))
  33. </script>


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值