.net 3.5(sp1)中的System.Web.HttpUtility.HtmlEncode / .Decode函数是否有“更薄”的替代品?一个单独的库是好的......甚至是“想要的”,至少是一些不会引入System.Web所需依赖的“全新世界”的东西。
我只想将普通字符串转换为符合xml / xhtml标准的字符串(& back)。
答案 0 :(得分:26)
在.NET Framework 4.0中,也许是System.Net.WebUtility.HtmlEncode? 请注意,此类位于System.dll而不是System.Web.dll 。
答案 1 :(得分:5)
对于XML,您只需要对具有特殊含义的字符进行编码,这样您就可以使用以下简单的方法:
public static string XmlEncode(string value) {
return value
.Replace("<", "<")
.Replace(">", ">")
.Replace("\"", """)
.Replace("'", "'")
.Replace("&", "&");
}
public static string XmlDecode(string value) {
return value
.Replace("<", "<")
.Replace(">", ">")
.Replace(""", "\"")
.Replace("'", "'")
.Replace("&", "&");
}
答案 2 :(得分:4)
对于HTML,如果使用.NET Framework 4.0的System.Net.WebUtility不是一个可行的解决方案,您可以使用它:
string HtmlEncode(string s)
{
if (s == null)
{
return null;
}
var result = new StringBuilder(s.Length);
foreach (char ch in s)
{
if (ch <= '>')
{
switch (ch)
{
case '<':
result.Append("<");
break;
case '>':
result.Append(">");
break;
case '"':
result.Append(""");
break;
case '\'':
result.Append("'");
break;
case '&':
result.Append("&");
break;
default:
result.Append(ch);
break;
}
}
else if (ch >= 160 && ch < 256)
{
result.Append("&#").Append(((int)ch).ToString(CultureInfo.InvariantCulture)).Append(';');
}
else
{
result.Append(ch);
}
}
return result.ToString();
}
实施的结果:
对字符串执行大量的Replace()会非常有用,尤其是在大字符串上。
<强>声明:强>
此解决方案的灵感来自于在.NET Framework 4.0系统程序集上使用JetBrains dotPeek。
答案 3 :(得分:1)
如果可能,您可以从Mono代码中“借用”HttpUtility类,并直接将其编译为您的实用程序集。
答案 4 :(得分:1)
虽然编码看似简单,但我强烈建议使用广泛使用的库,以最大限度地降低安全漏洞的风险。 Microsoft的Anti-Cross Site Scripting Library提供了Html / Xml / Javascript转义的方法以及相应的属性转义,并且应该涵盖您的大部分Web需求。
答案 5 :(得分:0)
与@marco相同,除了语言是powershell
function Invoke-HTMLEncode
{ #https://stackoverflow.com/questions/2779594/alternative-to-system-web-httputility-htmlencode-decode
param($string)
if([string]::isNullorEmpty($string))
{
$return = $null
}
$result = [system.text.stringbuilder]::new($string.length)
foreach($ch in $string.ToCharArray())
{
if([byte][char]$ch -le [byte][char]'>')
{
switch ($ch)
{
'<' {
$result.append("<") | out-null
break;
}
'>' {
$result.append(">")| out-null
break;
}
'"' {
$result.append(""")| out-null
break;
}
'&'{
$result.append("&")| out-null
break;
}
default {
$result.append($ch)| out-null
break;
}
}
}
elseif([byte][char]$ch -ge 160 -and [byte][char]$ch -lt 256)
{
#result.Append("&#").Append(((int)ch).ToString(CultureInfo.InvariantCulture)).Append(';');
$result.append("&#").append(([byte][char]$ch).toString([System.Globalization.CultureInfo]::InvariantCulture)).append(';') | out-null
}
else
{
$result.Append($ch) | out-null
}
}
$result.ToString()
}