问题描述
C#/.NET应用程序编程开发中,现有一个URL字符串var url = "https://www.baidu.com/";
被HttpUtility.UrlEncode()
方法编码过了,编码后的字符串如下:
https%3a%2f%2fwww.baidu.com%2f
假定被编码后的字符串变量名为result
,即:
var url = "https://www.baidu.com/";
var result = HttpUtility.UrlEncode(url);
在下次再使用此字符串之前,如何判断result
已被编码过?
方案一
将编码后的字符串进行解码,再与其对比,如果不一致,说明已被编码,否则未被编码,C#实现代码如下:
private static bool IsEncoded(string text)
{
var decodedUrl = HttpUtility.UrlDecode(text);
return !text.Equals(decodedUrl,StringComparison.OrdinalIgnoreCase);
}
或者
private static bool IsEncodedUrl(string val)
{
string decodedText = HttpUtility.UrlDecode(val);
string encodedText = HttpUtility.UrlEncode(decodedText);
return encodedText.Equals(val, StringComparison.OrdinalIgnoreCase);
}
完整示例:
using System;
using System.IO;
using System.Web;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApp2
{
class Program
{
public static void Main()
{
var url = "https://www.baidu.com/";
var result = HttpUtility.UrlEncode(url);
Console.WriteLine(result);
if (!IsEncoded(result))
{
Console.WriteLine("未被编码");
}
else
{
Console.WriteLine("已被编码");
}
if (!IsEncoded(url))
{
Console.WriteLine("未被编码");
}
else
{
Console.WriteLine("已被编码");
}
if (!IsEncodedUrl(result))
{
Console.WriteLine("未被编码");
}
else
{
Console.WriteLine("已被编码");
}
if (!IsEncodedUrl(url))
{
Console.WriteLine("未被编码");
}
else
{
Console.WriteLine("已被编码");
}
Console.ReadLine();
}
private static bool IsEncoded(string text)
{
var decodedUrl = HttpUtility.UrlDecode(text);
return !text.Equals(decodedUrl,StringComparison.OrdinalIgnoreCase);
}
private static bool IsEncodedUrl(string val)
{
string decodedText = HttpUtility.UrlDecode(val);
string encodedText = HttpUtility.UrlEncode(decodedText);
return encodedText.Equals(val, StringComparison.OrdinalIgnoreCase);
}
}
}
版权声明:本作品系原创,版权归码友网所有,如未经许可,禁止任何形式转载,违者必究。
发表评论
登录用户才能发表评论, 请 登 录 或者 注册