Ответ Бобинса дает решение того, что, по-видимому, является вашей главной задачей: заменить использование HtmlDecode более простым объявлением символа для замены.
Перепишите
sWebsiteText.Replace(HttpUtility.HtmlDecode("–"), "–")
как
sWebsiteText.Replace("\u2013", "–")
('\ u2014' (декабрь 8212) - это тире, '\ u2013' (декабрь 8211) - это тире)
Для удобства чтения лучше использовать "& # x2013;" вместо "-", поскольку объявление .Net для символа ("\ u2013") тоже в шестнадцатеричном виде. Но, поскольку десятичная запись в 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) & _
"]]>"
)