Bobince的回答給出了一個解決方案,似乎是你最關心的問題:用更直接的char聲明替換你對HtmlDecode的使用。
重寫
sWebsiteText.Replace(HttpUtility.HtmlDecode("–"), "–")
爲
sWebsiteText.Replace("\u2013", "–")
( '\ u2014'(DEC 8212)是破折號, '\ u2013'(DEC 8211)是短劃線。)
爲了提高可讀性目的可能被認爲更好使用「–」而不是「–」,因爲char(「\ u2013」)的.Net聲明也是十六進制的。但是,由於html中的十進制符號似乎更常見,我個人比較喜歡使用「–」。
爲了重用,您可能應該編寫自己的HtmlEncode函數,在自定義的HttpUtility中聲明,以便能夠從您站點中的任何其他位置調用它而不重複它。
(有這樣的事(對不起,我已經在C#寫它,忘記你的例子是在VB):
/// <summary>
/// Supplies some custom processing to some HttpUtility functions.
/// </summary>
public static class CustomHttpUtility
{
/// <summary>
/// Html encodes a string.
/// </summary>
/// <param name="input">string to be encoded.</param>
/// <returns>A html encoded string.</returns>
public static string HtmlEncode(string input)
{
if (intput == null)
return null;
StringBuilder encodedString = new StringBuilder(
HttpUtility.HtmlEncode(input));
encodedString.Replace("\u2013", "–");
// add over missing replacements here, as for —
encodedString.Replace("\u2014", "—");
//...
return encodedString.ToString();
}
}
然後更換
sWebsiteText = _
"<![CDATA[" & _
HttpUtility.HtmlEncode(sSomeText) & _
"]]>"
'This is the bit which seems "hacky"'
sWebsiteText = _
sWebsiteText.Replace(HttpUtility.HtmlDecode("–"), "–")
有了:
sWebsiteText = _
"<![CDATA[" & _
CustomHttpUtility.HtmlEncode(sSomeText) & _
"]]>"
)
我應該已經更清楚了 - 我的問題是找不到要編碼的內容,它會找到要編碼的內容。我會解決這個問題來說明問題。 – 2009-01-08 11:15:30