System.Web.dll中,System.Web.HttpUtility.HtmlEncode(string s)方法的原理是这样的:
首先判断传入的字符串是否为null,如果是,则返回null
if
(s
==
null
)
... {
return null;
}
... {
return null;
}
然后,尝试在传入的字符串中查找需要进行HTML字符转换的字符(即<,>,&,"),如果找不到,则不做任何处理返回
int
num
=
IndexOfHtmlEncodingChars(s,
0
);
if (num == - 1 )
... {
return s;
}
if (num == - 1 )
... {
return s;
}
其中IndexOfHtmlEncodingChars是一个unsafe关键字声明的方法:
static
unsafe
int
IndexOfHtmlEncodingChars(
string
s,
int
startPos)
该方法使用指针来对字符串进行查找(<,>,&,"),如果存在则返回index,否则返回-1.
然后将<替换为<,>替换为>,&替换为&,"替换为"
也就是说:如果字符串被执行了HtmlEncode之后,如果确实有字符被执行了替换。则一定会含有“&”字符,这就能理解为什么System.Web.HttpUtility.HtmlDecode为什么以“&”作为特征字符来判断字符串是否有字符需要被还原。