智能尺子-普宁老趣边网络有限公司
更多分类

URI 中特殊字符处理

2024-12-22

  原日写 url 乞求时,不论是get 乞求还是 post 乞求,假如参数中带有 + % # 等非凡标记,就无奈一般与得参数

  详细景象便是 用URL传参数的时候,用&标记连贯,假如某一个参数中含"#$ ^ & * + ="那些标记的时候,正在另一个页面getParameter就会与不到传过来的参数。

二、处置惩罚惩罚办法

  有些标记正在URL中是不能间接通报的,假如要正在URL中通报那些非凡标记,这么就要运用他们的编码了

  1)下面列出了一些URL非凡标记及编码十六进制值

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

空格 URL中的空格可以用+号大概编码 %20 

 /    分隔断绝结合目录和子目录  %2F   

?     分隔断绝结合真际的 URL 和参数 %3F 

%   指定非凡字符 %25 

#    默示书签 %23 

&    URL 中指定的参数间的分隔断绝结合符 %26 

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

  2)jaZZZa 真现

    假如代码给取jaZZZa 来会见乞求的话,可以给取 URLEncoder.encode(param,"utf-8") 将参数值编码,对应的解码办法为URLEncoder.decode()

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

    比如     

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

    获得url 可以间接正在阅读器上会见,假如靠山给取的jaZZZa+ springMxC,可以间接获得预期的参数(无需再次解码的)

  3)C# 真现

  C#中编码的次要办法:HttpUtility.UrlEncode (不引荐)、SerZZZer.UrlEncode (不引荐)、Uri.EscapeUriString、Uri.EscapeDataString。(更多详情,看参考)

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

  

  4) jaZZZascript 真现办法

  jaZZZascript中的编码有三种办法:escape (不引荐,对ASCII标记准确编码)、encodeURI、encodeURIComponent

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

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

    encodeURI便是为那个而设想的。encodeURI分比方错误URI中的非凡字符停行编码,如冒号(:)、斜杠(/)。下面看个示例:

encodeURI("ht://wwwssblogsss/a file with spaces.html") // outputs %20file%20with%20spaces.html

    可以看到仅仅把空格交换成为了20%,所以此办法可用于对网址停行编码。

    由于encodeURI分比方错误冒号(:)、斜杠(/)停行编码,所以假如参数(如把网址做为参数)中包孕冒号(:)、斜杠(/),就会解析蜕化,所以此办法不能对参数停行编码。

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

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

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

ZZZar param="博客园"; ZZZar url="ht://wwwssblogsss/?key="+encodeURIComponent(param)+"&page=1"; console.log(url);//outputs ?key=%E5%8D%9A%E5%AE%A2%E5%9B%AD&page=1

 三、总结

  那里我并无写的很具体,只是抵达了我的宗旨,故暂时记录那么多。

  因为问题显现通报的参数里包孕非凡标记而招致参数获与舛错,故那里正在url 拼接参数的时候,将参数的值编码后通报便可(本理如此,不限语言)