- 浏览: 154304 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
liveandevil:
我的一直出现驱动找不到的错误 你那个驱动jar文件时放在哪里 ...
JDBC数据库通用DAO -
zouc816:
hi,wjm901215
我看你这篇文章对mapXtreme ...
用mapXtreme Java开发web gis应用 (下)
疑问被确定在了那个大大的prototype.js文件上。出错的脚本行最终被定位到一句调用decodeURIComponent方法的地方,找到了就好办了,不想去改prototype.js,干脆写个自己的decodeURIComponent覆盖它。查了文档知道JScript 5.5 新增的以下4个跟URI编码解码相关的函数:
encodeURI,decodeURI,encodeURIComponent,decodeURIComponent
测试发现,这里的4个函数(方法)和Java中的类似,都是以Unicode标准进行编码解码的,也就是说将汉字视为3字节进行处理,一个汉字编码后变为类似的 %hh%hh%hh 的形式,相应的,解码函数的参数也必须复合编码结果的格式,二者可逆,否则就会报错“被解码的 URI 不是合法的编码” 。而我们程序中比较常用的GB2312, GBK, UTF-8处理中文都是2字节的,这是导致问题的根源。例:在编码为GBK的ASP中,使用Server.URLEncode("中")的结果是%D6%D0,但在客户端js里encodeURI("中") 或 encodeURIComponent("中")的结果是%E4%B8%AD ,而如果把%D6%D0传给decodeURI或decodeURIComponent ,就会报错“被解码的 URI 不是合法的编码” 。
不想改prototype.js的话,自己写函数覆盖上面4个方法的默认实现。下面是代码。供参考。
<script language="vbscript">
Function URLEncode(str)
Dim s,c,a,t
For i=1 To Len(str)
c = Mid(str,i,1)
a = ASC(c)
If a<0 OR a>255 Then
t=Hex(a)
While len(t) mod 2 > 0
t = "0" & t
Wend
For j=1 To len(t)-1 Step 2
s = s & "%" & Mid(t,j,2)
Next
ElseIf a=32 Then
s = s & "+"
ElseIf (a>=48 and a<=57) or (a>=65 and a<=90) or (a>=97 and a<=122) Then
s = s & c
ElseIf a>0 and a<16 Then
s = s & "%0" & Hex(a)
ElseIf a>=16 and a<256 Then
s = s & "%" & Hex(a)
Else
s = s & c
End If
Next
URLEncode = s
End Function
Function URLDecode(input)
Dim str,code,a(3),b(1)
str=""
code=input
code=Replace(code,"+"," ")
Const hexstr = "0123456789ABCDEF"
While len(code)>0
If InStr(code,"%")>0 Then
str = str & Mid(code,1,InStr(code,"%")-1)
code = Mid(code,InStr(code,"%"))
a(0) = UCase(Mid(code,2,1))
a(1) = UCase(Mid(code,3,1))
If a(1)<>"" And InStr(hexstr,a(0))>0 And InStr(hexstr,a(1))>0 Then
b(0) = Eval("&H" & a(0) & a(1))
If b(0)>127 And Mid(code,4,1)="%" And len(code)>=6 Then
a(2) = UCase(Mid(code,5,1))
a(3) = UCase(Mid(code,6,1))
If a(3)<>"" And InStr(hexstr,a(2))>0 And InStr(hexstr,a(3))>0 Then
b(1) = Eval("&H" & a(2) & a(3))
str = str & chr(b(0)*256+b(1))
code = Mid(code,7)
Else
str = str & "%"
code = Mid(code,2)
End If
Else
str = str & chr(b(0))
code = Mid(code,4)
End If
Else
str = str & "%"
code = Mid(code,2)
End If
Else
str = str & code
code = ""
End If
Wend
URLDecode = str
End Function
</script>
<script language="javascript">
function encodeURIComponent(code){
return URLEncode(code);
}
function decodeURIComponent(code){
return URLDecode(code);
}
function encodeURI(code){
return URLEncode(code);
}
function decodeURI(code){
return URLDecode(code);
}
</script>
Function URLEncode(str)
Dim s,c,a,t
For i=1 To Len(str)
c = Mid(str,i,1)
a = ASC(c)
If a<0 OR a>255 Then
t=Hex(a)
While len(t) mod 2 > 0
t = "0" & t
Wend
For j=1 To len(t)-1 Step 2
s = s & "%" & Mid(t,j,2)
Next
ElseIf a=32 Then
s = s & "+"
ElseIf (a>=48 and a<=57) or (a>=65 and a<=90) or (a>=97 and a<=122) Then
s = s & c
ElseIf a>0 and a<16 Then
s = s & "%0" & Hex(a)
ElseIf a>=16 and a<256 Then
s = s & "%" & Hex(a)
Else
s = s & c
End If
Next
URLEncode = s
End Function
Function URLDecode(input)
Dim str,code,a(3),b(1)
str=""
code=input
code=Replace(code,"+"," ")
Const hexstr = "0123456789ABCDEF"
While len(code)>0
If InStr(code,"%")>0 Then
str = str & Mid(code,1,InStr(code,"%")-1)
code = Mid(code,InStr(code,"%"))
a(0) = UCase(Mid(code,2,1))
a(1) = UCase(Mid(code,3,1))
If a(1)<>"" And InStr(hexstr,a(0))>0 And InStr(hexstr,a(1))>0 Then
b(0) = Eval("&H" & a(0) & a(1))
If b(0)>127 And Mid(code,4,1)="%" And len(code)>=6 Then
a(2) = UCase(Mid(code,5,1))
a(3) = UCase(Mid(code,6,1))
If a(3)<>"" And InStr(hexstr,a(2))>0 And InStr(hexstr,a(3))>0 Then
b(1) = Eval("&H" & a(2) & a(3))
str = str & chr(b(0)*256+b(1))
code = Mid(code,7)
Else
str = str & "%"
code = Mid(code,2)
End If
Else
str = str & chr(b(0))
code = Mid(code,4)
End If
Else
str = str & "%"
code = Mid(code,2)
End If
Else
str = str & code
code = ""
End If
Wend
URLDecode = str
End Function
</script>
<script language="javascript">
function encodeURIComponent(code){
return URLEncode(code);
}
function decodeURIComponent(code){
return URLDecode(code);
}
function encodeURI(code){
return URLEncode(code);
}
function decodeURI(code){
return URLDecode(code);
}
</script>
经本人测试可行
发表评论
-
JAX-WS一个很简单的RPC风格的Web Service同步调用
2013-01-10 17:13 940Web Service技术,无疑会越来越被广泛应用的,可 ... -
JAX-WS集成Web工程的Web Service的创建和发布简单入门(1)
2013-01-10 17:10 1033首先, 为了我们这个WS的实验能够顺利的完成,最好能到官 ... -
C3P0连接池配置
2012-11-08 10:07 928<c3p0-config> <defau ... -
Http学习之使用HttpURLConnection发送post和get请求 .
2012-10-29 15:40 1077最常用的Http请求无非是get和post,get请求可以获取 ... -
WebServices实例
2012-09-06 16:58 611http://www.cnblogs.com/mingzi/a ... -
博客文章
2012-08-23 14:13 0http://caoweiblog.sinaapp.com/ -
80端口被占用
2012-08-09 10:53 748netstat -aon|findstr "80&q ... -
ANT build.xml文件详解
2012-07-26 16:29 858Ant的优点 跨平台性。Ant是用Java语言编写的 ... -
关于C3P0超过最大连接数问题
2012-07-02 10:27 1166package com.innotek; import ... -
设置Eclipse背景色
2012-06-21 15:33 826(Window)-->(Preferences)--&g ... -
JSTL之formatNumber取整 .
2012-03-16 23:16 1758在网上查了许多资料都说EL表达式无法取整,的确EL表达式除法结 ... -
Apache APMServ 80端口被占用的最全面的解决方法
2011-12-14 13:35 374311小时前 在使用WampServer成功架设起Apache ... -
Eclipse中添加MyEclipse插件
2011-12-14 11:31 761众所周知eclipse是一个很强大的java IDE,而且它免 ... -
千万数量级分页存储过程,可支持多表查询,任意排序
2011-12-12 11:15 1213从程序中考虑:比如用 ... -
java技术大全网址
2011-11-28 14:20 773http://www.open-open.com/ -
Eclipse的TPTP使用方法
2011-10-09 13:56 1623Eclipse的TPTP工具使用方法:1. ... -
TPTP教程
2011-10-09 11:04 1122Eclipse Test and Performance To ... -
JExcelAPI修改Excel的实例
2011-09-09 14:33 867package com.jExcelApi.test; ... -
Java Excel API 使用方法(2)
2011-09-09 09:48 743Workbook类提供的方法 1. int getNumbe ... -
EL表达式取整或者取固定位小数 目前最好的方法
2011-07-28 10:37 922在网上查了许多资料都说EL表达式无法取整,的确EL表 ...
相关推荐
在Java后台处理中,也可以使用decodeURI、decodeURIComponent函数来解码URI中的编码字符串。 JavaScript和JavaWeb对汉字编码的策略非常重要,正确的编码和解码处理对于确保数据的正确传输和显示至关重要。
不会被此方法编码的字符: @ * / + encodeURI() 方法: 把URI字符串采用UTF-8编码格式转化成escape格式的字符串。 不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + ‘ encodeURIComponent() 方法: 把 URI字符...
文章详细阐述了Apache和Internet Information Server (IIS)下各种有效的URL编码方式,并提供了具体的示例,以展示如何通过合法的编码规则来混淆真实意图,从而避免被IDS识别。 #### HTTP协议特性的利用 除了...
2. **URL编码不一致**:redirect_uri在传递过程中可能会被编码,如果编码方式不正确或者在解码时出现问题,也可能导致错误。确保URL是按照RFC3986标准进行编码的,并且在服务器端正确解码。 3. **拼写和大小写错误*...
2. **编码与解码**:URI中不能包含某些特殊字符,因此在URI中,这些字符会被转换为百分号编码(%xx)。uri.c中可能会有函数负责对字符串进行适当的编码和解码。 3. **合法性检查**:函数可能包括验证URI是否符合RFC...
本文实例讲述了JavaScript使用encodeURI()和decodeURI()获取字符串值的方法。分享给大家供大家参考。具体如下: JavaScript使用encodeURI()和decodeURI()获取字符串值,不能就是地址栏显示的字串,以前经常在网上...
这可以通过在用户输入时进行过滤,或者通过使用CodeIgniter提供的 URI 编码和解码类,以及内置的输入类来帮助清洗数据。 此外,对于那些已经传递了不合法字符的情况,可以在控制器中对输入参数进行处理。可以利用...
- URI编码和解码:处理URI中的特殊字符,确保它们能在网络传输中正确表示。 在Rust项目中,可以通过`Cargo`来添加`uriparser`作为依赖,并按照提供的示例或文档来集成到自己的代码中,从而提高URI处理的效率和安全...
- **编码与解码**:理解URI中的特殊字符编码,如空格被替换为`%20`。 - **URL重定向**:处理HTTP状态码3xx时的重定向URI。 通过这些练习,你可以深入理解URI的工作原理,提高处理网络请求的能力,这对开发Web应用、...
- 项目“uri-problems”可能包含各种场景下的问题解决方案,如编码解码问题、相对路径解析、特殊字符处理等。 - 学习这个项目可以提高对URI处理的理解,避免常见的陷阱和错误。 通过深入理解和应用这些知识点,...
3. URL编码与解码:处理含有非ASCII字符的URI。 4. 与其他网络请求库(如`requests`)结合使用,发送HTTP请求并处理响应。 通过实践这个URI在线法官项目,你不仅能巩固Python的URI处理技巧,还能提升对HTTP协议的...
然而,encodeURI在处理如中文、韩文这类非ASCII字符时并不适合,因为它们会被错误地编码,可能会破坏服务器端对这些字符的解码。 encodeURIComponent函数同样用于编码URI的一部分,但它与encodeURI的主要区别在于,...
1. 安全性:确保只有合法的base64字符串被解析,防止恶意输入。 2. 性能优化:如果处理大量链接,应考虑批量解析或异步处理。 3. 错误处理:对解析失败或无效链接的情况进行适当处理。 4. 法规遵从:在处理磁力链接...
- **URL编码与percent-encoding的区别**:在某些情况下,术语"URL编码"也被用来指代更广泛的percent-encoding,percent-encoding是URI(统一资源标识符)组件编码的一部分,不仅仅局限于URL。 通过以上内容,你将...
- `encodeURI`则只会对URI中的保留字符、特殊字符等进行编码,而不会编码已经合法的URI组成部分(如路径分隔符“/”等)。 因此,在处理包含中文或其他非ASCII字符的URL参数时,通常推荐使用`encodeURIComponent`。...
接着,它使用适当的编码和解码技术,将这些片段无缝拼接成一个完整的视频文件,常见的输出格式有MP4、MKV等。 4. **加密与解密**:有些M3U8流可能被加密,以防止非法下载。在这种情况下,下载工具需要能够识别并...
由于JSON格式本身有其编码和解码的要求,单纯设置`contentType`并不能直接解决中文字符的编码问题。此时,问题的关键在于Validation插件的内部实现,它没有对数据进行正确的URL编码处理,从而导致了编码错误。 为了...
例如,某些字符或字符串在经过特定的编码和解码过程后可能会发生转换,从而使得恶意代码得以绕过安全检测。最常见的例子就是脚本标签在某些情况下可能被替换为其他形式,如İpt>,从而绕过输入过滤机制。 为了发现...
它只对URI中有意义的字符进行编码,比如空格会被编码成“%20”。编码后可以用于URL请求,或者在网页中作为链接的href属性值。 示例代码: ```javascript document.write("使用encodeURI()函数 "); document....
- 对每个头域进行解析,例如,解析From、To、Call-ID、CSeq等关键头域,确保消息的完整性和合法性。 - 如果消息体是SDP,还需要解析SDP内容,包括媒体类型、端口号、编码格式等。 4. 编码SIP消息 - 创建SIP消息...