HttpUtility.UrlEncode 编码输出的字母为小写,怎样改成大写呢?
我在使用 HttpUtility.UrlEncode 编码后输出 的值 就像是 %3d 这样的, 我想输出 %3D 这样的 字母为大写的 。怎么办呢?
如果能把输出后的整个字符串 如 https%3a%2f%2fwww.abc.com 处理为 https%3A%2F%2Fwww.abc.com 这样的也可以。
[最优解释]
Public Sub Main()
Dim sInput, sRegex As String
sInput = "aabbccddeeffcccgghhcccciijjcccckkcc"
sRegex = "cc"
Dim r As Regex = New Regex(sRegex)
Dim myEvaluator As MatchEvaluator = New MatchEvaluator(AddressOf ReplaceCC)
sInput = r.Replace(sInput, myEvaluator)
Console.WriteLine(sInput)
End Sub
Public Function ReplaceCC(ByVal m As Match) As String
Dim i As String = m.ToString.ToUpper
Return i.ToString()
End Function
Function UrlEncode(ByVal originalUrl As String) As String
Dim bytes() As Byte = System.Text.Encoding.Default.GetBytes(originalUrl)
Dim stringWriter As System.IO.StringWriter = New System.IO.StringWriter()
For i As Integer = 0 To bytes.Length - 1
Dim c As Byte = bytes(i)
If ((c >= 48) And (c <= 57)) Or ((c >= 65) And (c <= 90)) Or ((c >= 97) And (c <= 122)) Then
stringWriter.Write(CType(ChrW(c), Char))
ElseIf c = 32 Then
stringWriter.Write("+")
Else
stringWriter.Write("%{0:X2}", c)
End If
Next
Return stringWriter.ToString()
End Function
/// <summary>
/// URL编码
/// </summary>
/// <param name="value">The value to Url encode</param>
/// <returns>Returns a Url encoded string</returns>
public string UrlEncode(string value)
{
StringBuilder result = new StringBuilder();
string unreservedChars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~";
foreach (char symbol in value)
{
if (unreservedChars.IndexOf(symbol) != -1)
{
result.Append(symbol);
}
else
{
result.Append('%' + String.Format("{0:X2}", (int)symbol));
}
}
return result.ToString();
}
怎么样,一看就明白了吧……
因为他的原理就是每一个字符都转化为一个编码值。那么,咱们就先把他一个个拿出来编码。
再单个转化成大写。这样不就解决了……
希望可以帮助到有需要的人。
[其他解释]
楼上的思路不错,顶下