标签:
FrameWork2.0下JavaScriptStringEncode函数不存在,参照微软4.5.2的开源代码自己写一个
1 Imports Microsoft.VisualBasic 2 Imports System.Globalization 3 Imports App_Code.Zebra.Commons 4 5 Namespace App_Code.Zebra.BusinessLogic.Commons 6 Public Class HtmlOutputEscape 7 8 ‘‘‘ <summary> 9 ‘‘‘ 文字列から HTML エンコードされた文字列への最小限の変換を行います 10 ‘‘‘ </summary> 11 ‘‘‘ <param name="value">エスケープする文字列</param> 12 ‘‘‘ <returns>エスケープされた文字列</returns> 13 ‘‘‘ <remarks></remarks> 14 Public Shared Function HtmlAttributeEncode(ByVal value As String) As String 15 Return HttpUtility.HtmlAttributeEncode(value) 16 End Function 17 18 ‘‘‘ <summary> 19 ‘‘‘ 文字列を、HTML エンコードされた文字列に変換します 20 ‘‘‘ </summary> 21 ‘‘‘ <param name="value">エスケープする文字列</param> 22 ‘‘‘ <returns>エスケープされた文字列</returns> 23 ‘‘‘ <remarks></remarks> 24 Public Shared Function HtmlEncode(ByVal value As String) As String 25 Return HttpUtility.HtmlEncode(value) 26 End Function 27 28 ‘‘‘ <summary> 29 ‘‘‘ URL 文字列をエンコードします。 30 ‘‘‘ </summary> 31 ‘‘‘ <param name="value">エスケープするURL</param> 32 ‘‘‘ <returns>エスケープされたURL</returns> 33 ‘‘‘ <remarks></remarks> 34 Public Shared Function UrlEncode(ByVal value As String) As String 35 Return HttpUtility.UrlEncode(value) 36 End Function 37 38 ‘‘‘ <summary> 39 ‘‘‘ JavaScriptをエンコードします。 40 ‘‘‘ </summary> 41 ‘‘‘ <param name="value">エスケープするデータ</param> 42 ‘‘‘ <returns>エスケープされたデータ</returns> 43 ‘‘‘ <remarks></remarks> 44 Public Shared Function JavaScriptStringEncode(ByVal value As String) As String 45 If String.IsNullOrEmpty(value) Then 46 Return String.Empty 47 End If 48 49 Dim b As StringBuilder = Nothing 50 Dim startIndex As Integer = 0 51 Dim count As Integer = 0 52 53 Dim i As Integer 54 For i = 0 To value.Length - 1 55 Dim c As Char = value(i) 56 57 If CharRequiresJavaScriptEncoding(c) Then 58 ‘エンコード必要場合、メモリに格納できる最大文字数再定義します。 59 If b Is Nothing Then 60 b = New StringBuilder(value.Length + 5) 61 End If 62 63 If count > 0 Then 64 b.Append(value, startIndex, count) 65 End If 66 67 startIndex = i + 1 68 count = 0 69 End If 70 71 Select Case c 72 Case "\r" 73 b.Append("\\r") 74 Case "\t" 75 b.Append("\\t") 76 Case """" 77 b.Append("""""") 78 Case "\\" 79 b.Append("\\\\") 80 Case "\n" 81 b.Append("\\n") 82 Case "\b" 83 b.Append("\\b") 84 Case "\f" 85 b.Append("\\f") 86 Case Else 87 If CharRequiresJavaScriptEncoding(c) Then 88 AppendCharAsUnicodeJavaScript(b, c) 89 Else 90 count += 1 91 End If 92 End Select 93 Next 94 95 If b Is Nothing Then 96 Return value 97 End If 98 99 If count > 0 Then 100 b.Append(value, startIndex, count) 101 End If 102 103 Return b.ToString() 104 End Function 105 106 Public Shared Function CharRequiresJavaScriptEncoding(ByVal value As Char) As Boolean 107 Dim strValue As String = value.ToString 108 ‘\u2028、\u2029、\u0085 = \r 109 If strValue = "\r" Or _ 110 strValue = """" Or _ 111 strValue = "\\" Or _ 112 strValue = "‘" Or _ 113 strValue = "<" Or _ 114 strValue = ">" Or _ 115 strValue = "&" Or _ 116 Convert.ToInt32(value) < 32 Then 117 Return True 118 End If 119 Return False 120 End Function 121 122 Public Shared Sub AppendCharAsUnicodeJavaScript(ByVal builder As StringBuilder, ByVal c As Char) 123 ‘0x01→\u0001 124 builder.Append("\\u") 125 builder.Append((Convert.ToInt32(c)).ToString("x4", CultureInfo.InvariantCulture)) 126 End Sub 127 128 End Class 129 End Namespace
标签:
原文地址:http://www.cnblogs.com/BIGFOOT/p/4205506.html