首页 > 其他分享 >URI 中特殊字符处理

URI 中特殊字符处理

时间:2022-10-13 21:33:53浏览次数:51  
标签:编码 处理 URI 空格 URL 参数 特殊符号 encodeURI 特殊字符

一、问题阐述

  今天写 url 请求时,不管是get 请求还是 post 请求,如果参数中带有 + % # 等特殊符号,就无法正常获得参数

  具体现象就是 用URL传参数的时候,用&符号连接,如果某一个参数中含"#$ ^ & * + ="这些符号的时候,在另一个页面getParameter就会取不到传过来的参数。

二、解决方法

  有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了

  1)下面列出了一些URL特殊符号及编码十六进制值

  • +    URL 中+号表示空格             %2B
  • 空格 URL中的空格可以用+号或者编码 %20
  • /    分隔目录和子目录  %2F
  • ?     分隔实际的 URL 和参数 %3F
  • %   指定特殊字符 %25
  • #    表示书签 %23
  • &    URL 中指定的参数间的分隔符 %26
  • =    URL 中指定参数的值 %3D

 

   2)java 实现

URLEncoder.decode()

    java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s); 

    比如     

String str = "http://localhost:8980/select?param=" + URLEncoder.encode("bcpuser$userid$1#3#4","utf-8") ; 
//得到结果 http://localhost:8980/BCPClientServer/select?param=bcpuser%24userid%241%233%234

    得到url 可以直接在浏览器上访问,如果后台采用的java+ springMVC,可以直接得到预期的参数(无需再次解码的)

 

  3)C# 实现

(不推荐)、Uri.EscapeUriString、Uri.EscapeDataString。(更多详情,看参考)

String str = "http://localhost:8980/select?param=" + Uri.EscapeDataString("bcpuser$userid$1#3#4"); 
//得到结果 http://localhost:8980/BCPClientServer/select?param=bcpuser%24userid%241%233%234

  

  4) javascript 实现方法

对ASCII符号正确编码)、encodeURI、encodeURIComponent

  encodeURI:用于对网址编码(不包含参数)

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

    encodeURI就是为这个而设计的。encodeURI不对URI中的特殊字符进行编码,如冒号(:)、斜杠(/)。下面看个示例:

    可以看到仅仅把空格替换成了20%,所以此方法可用于对网址进行编码。

    由于encodeURI不对冒号(:)、斜杠(/)进行编码,所以如果参数(如把网址作为参数)中包含冒号(:)、斜杠(/),就会解析出错,所以此方法不能对参数进行编码。

 

   encodeURIComponent:用于对网址参数进行编码

    encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

    可以看到此方法对:/都进行了编码,所以不能用它来对网址进行编码。由于此方法对中文,空格,井号(#),斜线(/),冒号(:)都进行了编码,所以适合对URI中的参数进行编码。看下面的示例:

 

 三、总结

  这里我并没有写的很详细,只是达到了我的目的,故暂时记录这么多。

  因为问题出现传递的参数里包含特殊符号而导致参数获取错误,故这里在url 拼接参数的时候,将参数的值编码后传递即可(原理如此,不限语言)

 


,"utf-8") 


作者:​​​panie​​​



标签:编码,处理,URI,空格,URL,参数,特殊符号,encodeURI,特殊字符
From: https://blog.51cto.com/u_15812342/5754665

相关文章

  • 【自然语言处理(NLP)】基于BiLSTM的关系抽取
    【自然语言处理(NLP)】基于BiLSTM的关系抽取作者简介:在校大学生一枚,华为云享专家,阿里云专家博主,腾云先锋(TDP)成员,云曦智划项目总负责人,全国高等学校计算机教学与产业实践资......
  • For gamers. BY GAMERS (dp预处理+二分)
    题目大意:给出n个类型的魔法,每个魔法需要可以给敌人造成伤害,给自己弄血,但是需要花费Ci,给你X个金币,询问m次,  给出怪兽的血和攻击,问最少许需要多少金币才......
  • android开发使用git-tortoisesvn合并代码处理冲突的使用记录
    android开发使用git-tortoisesvn合并代码处理冲突的使用记录工具Androidstudio,Git,tortoisesvn作为Android开发的,androidstudio离不开,使用git管理项目也是离不开的,......
  • Linux 下暂停了进程怎么处理?suspend
    什么时候用?1、当使用Linux工作的过程中,我们可能会出现使用ctrl+c也无法终止进程的情况2、一个进程需要的时间太长,暂时不想运行怎么用?在进程进行的的过程中按ctrl+......
  • Security Plan
    传送门容易发现,只要\(4\)个就一定可以覆盖所有格子。所以算法呼之欲出:大力分讨!那么一个的只可能是四个角(靠不一定是四个。。)Notice:\(n=1,m=1\)之类的边界再分讨时......
  • 你知道你们退货的游戏本,厂家都怎么处理的吗?
    工厂顾问数字化组件所有生产活动围绕订单/工单进行对所有业务进行信息跟踪以生产执行追踪为基础以及时绩效及任务为提高执行力的共享平台所以游戏本去哪了?评论区说说你的答......
  • 十一(一)、springMVC之异常处理@ExceptionHandler注解
    一、概述:springMVC通过HandlerExceptionResolver处理程序的异常,异常包括Handler映射、数据绑定以及目标方法执行时发生的异常;springMVC提供的HandlerExceptionResolver的实......
  • 【论文阅读-提示学习】Prompt在自然语言处理任务中的迁移性
    Prompttuning(PT)只需要调整少量参数即可实现与全参数微调相当的性能,是一种使用超大规模PLM的参数高效方法。然而,与微调相比PT需要更多训练时间。提示学习与全参数微......
  • excel 处理
    只能处理.xlsx格式的excel依赖包安装pipinstallopenpyxl==3.0.10封装常用方法点击查看代码importfunctoolsfromtypingimportMapping,Listimportopenpyxl......
  • MySQL主从搭建及主从不同步问题处理
    1、使用主从同步的好处:1.通过增加从服务器来提高数据库的性能,在主服务器上执行写入和更新,在从服务器上向外提供读功能,可以动态地调整从服务器的数量,从而调整整个数据库的......