如何检查字符串是html编码或不

本文关键字:html 编码 字符串 何检查 检查 | 更新日期: 2023-09-27 18:01:54

我正在使用我的web API。有些用户发送的参数字符串作为HTML编码,我想确定未来的参数是HTML编码或纯文本。

我的Web API方法是
public HttpResponseMessage Get(string Accesskey, string AccessPwd)
{
   // code logic
}

我得到Accesskey作为Html编码像

Accesskey="AbIfZVn4y514sJbt%2BCCMJy6lsmsMi6uOWyhUhynDSf1MEqZ%2FWJnwUuCFO8zMFa4jCRWQrXHKdBaHd9CCdDNfoKDnPg1W9No16JQbL2DBEGg%3D";

我希望输出像

Accesskey="AbIfZVn4y514sJbt+CCMJy6lsmsMi6uOWyhUhynDSf1MEqZ/WJnwUuCFO8zMFa4jCRWQrXHKdBaHd9CCdDNfoKDnPg1W9No16JQbL2DBEGg="

如何检查字符串是html编码或不

一种技术应该是强制URL解码并检查结果是否与源字符串相同。

using System;
using System.Web;
var incomingStrings = new[] { "not encoded", "encodéd" };
foreach (var incomingString in incomingStrings)
{
    Console.WriteLine(IsUrlEncoded(incomingString));
}
private bool IsUrlEncoded(string source)
{
    return source != HttpUtility.UrlDecode(source);
}

我也遇到过这个问题。我的文本值并不总是编码HTML,它可以只是编码文本。当我使用

这样的方法时

HttpUtility.HtmlDecode(值)

总是返回相同的文本,未解码。所以这对我来说不是工作。

为了解决这个问题,我使用了一种粗略的方法,检查字符串是否通常是编码文本。

if (!string.IsNullOrEmpty(value) && value.Length % 4 == 0 && !value.Contains(" ") && 
!value.Contains("'t") && !value.Contains("'r") && !value.Contains("'n"))
{
    // it's encoded text value
}
  • 编码文本的长度总是4的倍数。
  • 编码文本永远没有空格。
  • 编码文本永远不会有任何制表符或换行符。

你可以直接使用

console.log('yourtext');