在我们的MVC3 ASP.net项目中,HttpUtility.
HtmlEncode方法似乎逃避了太多的字符.我们的网页作为UTF-8页面提供,但该方法仍然可以转换字符,如ü或日元字符¥,即使这些字符是
UTF-8 set的一部分.
所以当我的asp.net MVC视图包含以下代码时:
@("<strong>ümlaut</strong>")
然后我希望Encoder能够逃避html标签,但不是ümlaut
<strong>ümlaut</strong>
但相反,它给了我以下HTML:
<strong>ümlaut</strong>
为了完整起见,我还提到web.config中的responseEncoding明确地设置为utf-8,所以我希望HtmlEncode方法能够遵循这个设置.
<globalization requestEncoding="utf-8" responseEncoding="utf-8" />
解决方法
是的,我的网页面临同样的问题.
如果我们看到htmlEncode的代码,那么有一个点可以翻译这组字符.这是这种字符也翻译的代码.
如果我们看到htmlEncode的代码,那么有一个点可以翻译这组字符.这是这种字符也翻译的代码.
if ((ch >= '\x00a0') && (ch < 'A')) { output.Write("&#"); output.Write(ch.ToString(NumberFormatInfo.InvariantInfo)); output.Write(';'); } else { output.Write(ch); }
这是HtmlEncode的代码
public static unsafe void HtmlEncode(string value,TextWriter output) { if (value != null) { if (output == null) { throw new ArgumentNullException("output"); } int num = IndexOfHtmlEncodingChars(value,0); if (num == -1) { output.Write(value); } else { int num2 = value.Length - num; fixed (char* str = ((char*) value)) { char* chPtr = str; char* chPtr2 = chPtr; while (num-- > 0) { output.Write(chPtr2[0]); chPtr2++; } while (num2-- > 0) { char ch = chPtr2[0]; if (ch <= '>') { switch (ch) { case '&': { output.Write("&"); chPtr2++; continue; } case '\'': { output.Write("'"); chPtr2++; continue; } case '"': { output.Write("""); chPtr2++; continue; } case '<': { output.Write("<"); chPtr2++; continue; } case '>': { output.Write(">"); chPtr2++; continue; } } output.Write(ch); chPtr2++; continue; } // !here is the point! if ((ch >= '\x00a0') && (ch < 'Ā')) { output.Write("&#"); output.Write(ch.ToString(NumberFormatInfo.InvariantInfo)); output.Write(';'); } else { output.Write(ch); } chPtr2++; } } } } }