我正在生成一些要在网站上显示的文字,并使用HttpUtility.HtmlEncode确保它看起来正确。但是,此方法似乎不编码Em Dash(它应将其转换为“ - ”)。
我已经提出了一个解决方案,但我确信有更好的方法 - 一些库函数或其他东西。
sWebsiteText = _
"<![CDATA[" & _
HttpUtility.HtmlEncode(sSomeText) & _
"]]>"
'This is the bit which seems "hacky"'
sWebsiteText = _
sWebsiteText.Replace(HttpUtility.HtmlDecode("–"), "–")
所以我的问题是 - 你将如何实施“hacky”部分?
非常感谢,
RB。
答案 0 :(得分:3)
由于此字符不是ASCII字符,我该如何对其进行编码?
它不是ASCII字符,但它是一个Unicode字符,U + 2014。如果您的页面输出将是UTF-8,在这个时代,它确实应该是,您不需要对其进行HTML编码,只需直接输出该字符。
是否有其他角色可能会给我带来麻烦。
它给你带来了什么问题?如果你不能输出' - ',你可能无法输出任何其他非ASCII Unicode字符,其中有数千个字符。
将“\ u2014”替换为“&amp;#x2014;”如果你真的必须,但真的使用今天的Unicode感知工具,就不需要用标记来替换每个非ASCII Unicode字符。
答案 1 :(得分:0)
按照A List Apart问题中的建议,查看HTML Apostrophe。
em破折号 - 由—
表示。
答案 2 :(得分:0)
Bobince的回答为您的主要关注提供了一个解决方案:通过更直接的char替换来替换您对HtmlDecode的使用。
重写
sWebsiteText.Replace(HttpUtility.HtmlDecode("–"), "–")
如
sWebsiteText.Replace("\u2013", "–")
('\ u2014'(dec 8212)是破折号,'\ u2013'(dec 8211)是破折号。)
出于可读性目的,使用“&amp;#x2013;”可能会更好。而不是“&amp;#8211;”,因为char(“\ u2013”)的.Net声明也是十六进制。但是,由于十进制符号似乎在html中更常见,我个人更喜欢使用“&amp;#8211;”。
出于重用目的,您可能应该编写自己的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) & _
"]]>"
)