【问题标题】:How can I use HtmlTextWriter to write html comments?如何使用 HtmlTextWriter 编写 html 注释?
【发布时间】:2023-03-28 11:24:01
【问题描述】:

我正在使用 HtmlTextWriter 将 html 输出到流中。但是,我缺少一种编写 html cmets 的方法。当然,我可以写一个扩展方法做

public static void WriteComment(this HtmlTextWriter writer, string comment)
{
  writer.Write("<!-- ");
  writer.WriteEncodedText(comment);
  writer.Write(" -->");
}

但这确实感觉有点不雅 - 是否有一些我没有看到的内置方法?

【问题讨论】:

  • 不是你要找的答案,但更优雅一点:writer.Write("&lt;!-- " + comment + " --&gt;");
  • 它只是另一个标签,不是吗?我们没有为 HTML 规范中的每个有效标签名称提供单独的方法。
  • 我喜欢你的扩展。它恰到好处且优雅。
  • @Jodrell:评论不是标签,这就是问题的全部。
  • @Nolonar:很好,但由于评论的内容仍然必须是有效的 HTML(请参阅w3.org/TR/html4/intro/sgmltut.html#h-3.2.4),我更喜欢WriteEncodedText,更安全的解决方案。

标签: c# html .net htmltextwriter


【解决方案1】:

我可以说,在检查了specification 之后,这些扩展可能更正确,

public static void WriteBeginComment(this HtmlTextWriter writer)
{
    writer.Write(HtmlTextWriter.TagLeftChar);
    writer.Write("!--");
}

public static void WriteEndComment(this HtmlTextWriter writer)
{
    writer.Write("--");
    writer.Write(HtmlTextWriter.TagRightChar);
}

public static void WriteComment(this HtmlTextWriter writer, string comment)
{
    if (
        comment.StartsWith(">") || 
        comment.StartsWith("->") || 
        comment.Contains("--") ||
        comment.EndsWith("-"))
    {
        throw new ArgumentException(
            "text does not meet HTML5 specification",
            "comment");
    }

    writer.WriteBeginComment();
    writer.Write(comment);
    writer.WriteEndComment();
}

【讨论】:

  • 在阅读HTML comments within comments 之后,我确信WriteEncodedText 是必需的,但是在使用 w3c 验证器和浏览器进行测试之后,您的保护措施似乎已经足够了。接受。
  • @skolima,对于哪些 char 值可以被视为“文本”w3.org/TR/html-markup/syntax.html#text-syntax 似乎存在限制,但我认为此类验证超出了您的扩展范围。
猜你喜欢
  • 2021-12-22
  • 2014-05-21
  • 1970-01-01
  • 1970-01-01
  • 2016-11-27
  • 2021-01-10
  • 1970-01-01
  • 2012-11-02
相关资源
最近更新 更多