注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

樱之花

叶散的时候,你明白欢聚;花谢的时候,你明白青春.

 
 
 

日志

 
 
关于我

分类中“我的实验室”是我在日常工作中的一些知识总结,有些写的比较匆忙,可能大家在阅读时会产生困扰,后期有时间我会重新整理编辑,谢谢大家的到访,您们的支持是我前进的动力!

网易考拉推荐

VB.Net实现Javascript的escape和unescape函数  

2011-09-23 14:15:07|  分类: .NET/C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

很多人写Ajax的时候,喜欢在客户端使用escape函数对字符串进行编码后传回服务器端。那么,服务器端怎么unescape呢?

  对于ASP来说很简单,因为ASP除了可以使用VBScript编写,也支持使用javascript编写,在ASP页面中这样写就可以了:

<script language="javascript" runat="server">"
   function vbsunescape(source){
      return unescape(source);
   }
</script>

  对于ASP.Net来说,如果你使用的语言是C#或者VB.Net,事情就没那么简单了(当然,如果你用的是JScript.Net,就当我没说)。对此有人提出的解决方案是:在服务器端安装JScript.Net,然后用JScript.Net写一个组件,供VB.Net或者C#调用。——我晕,好复杂的解决方案。我还不如用VB.Net,或者C#直接写一个unescape呢。

  下面是从WSBLog中扒下来的代码,VB.Net版本:

Option Explicit On
Option Strict On

Imports System.Text

'---------------------------------------------------
'JavaScript escape and unescape equivalent
'--------------------------------------------------
Public Class JSEscapeUnescape
   Public Shared Function Escape(ByVal src As String) As String
      If src Is Nothing Then
         Return Nothing
      End If

      Dim i As Integer
      Dim j As Char
      Dim tmp As StringBuilder = New StringBuilder

      For i = 0 To src.Length - 1
         j = src.Chars(i)
         If Char.IsDigit(j) Or Char.IsLower(j) Or Char.IsUpper(j) Then
            tmp.Append(j)
         ElseIf (AscW(j) < 16 * 16) Then
            tmp.Append("%")
            If AscW(j) < 16 Then
               tmp.Append("0")
            End If
            tmp.Append(Hex(AscW(j)))
         Else
            tmp.Append("%u")
            If (AscW(j) < 16 * 16 * 16) Then
               tmp.Append("0")
            End If
            tmp.Append(Hex(AscW(j)))
         End If
      Next
      Return tmp.ToString()
   End Function

   Private Shared Function isHex(ByVal ch As Char) As Boolean
      If Asc(ch) >= Asc("0") And Asc(ch) <= Asc("9") Or Asc(ch) >= Asc("a") And Asc(ch) <= Asc("f") Or Asc(ch) >= Asc("A") And Asc(ch) <= Asc("F") Then
         Return True
      End If
      Return False
   End Function

   Public Shared Function Unescape(ByVal src As String) As String
      If src Is Nothing Then
         Return Nothing
      End If

      Dim sbtmp As StringBuilder = New StringBuilder
      Dim lastPos As Integer = 0
      Dim pos As Integer = 0
      Dim ch As Char
      While (lastPos < src.Length)
         pos = src.IndexOf("%", lastPos)
         If pos = lastPos Then
            If (pos + 6 <= src.Length) AndAlso (src.Chars(pos + 1) = "u"c Or src.Chars(pos + 1) = "U"c) _
                 AndAlso isHex(src.Chars(pos + 2)) AndAlso isHex(src.Chars(pos + 3)) AndAlso isHex(src.Chars(pos + 4)) AndAlso isHex(src.Chars(pos + 5)) Then
              ch = ChrW(Integer.Parse(src.Substring(pos + 2, 4), System.Globalization.NumberStyles.AllowHexSpecifier))
              sbtmp.Append(ch)
              lastPos = pos + 6
            ElseIf (pos + 3 <= src.Length) AndAlso isHex(src.Chars(pos + 1)) AndAlso isHex(src.Chars(pos + 2)) Then
               ch = ChrW(Integer.Parse(src.Substring(pos + 1, 2), System.Globalization.NumberStyles.AllowHexSpecifier))
               sbtmp.Append(ch)
               lastPos = pos + 3
            Else
               sbtmp.Append(src.Substring(pos, 1)) '吃掉一个“%”
               lastPos = pos + 1
            End If
         Else
            If pos = -1 Then
               sbtmp.Append(src.Substring(lastPos))
               lastPos = src.Length()
            Else
               sbtmp.Append(src.Substring(lastPos, pos - lastPos))
               lastPos = pos
            End If
         End If
         'System.Diagnostics.Debug.WriteLine(sbtmp.ToString())
      End While
      Return sbtmp.ToString()
   End Function

   'Public Shared Function test() As String
   '    Dim tmp As String = "中文青天白日>~!@#$%^&*()_+|\=-,./?><;'][{}"""
   '    System.Diagnostics.Debug.WriteLine("testing escape : " + tmp)
   '    tmp = Escape(tmp)
   '    System.Diagnostics.Debug.WriteLine(tmp)
   '    System.Diagnostics.Debug.WriteLine("testing unescape :" + tmp)
   '    System.Diagnostics.Debug.WriteLine(Unescape(tmp))
   'End Function
End Class

 

  评论这张
 
阅读(1305)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017