删除字符串中的 HTML 标签 [关闭]
Posted
技术标签:
【中文标题】删除字符串中的 HTML 标签 [关闭]【英文标题】:Remove HTML tags in String [closed] 【发布时间】:2011-06-20 04:35:13 【问题描述】:如何从以下字符串中删除 html 标记?
<P style="MARGIN: 0cm 0cm 10pt" class=MsoNormal><SPAN style="LINE-HEIGHT: 115%;
FONT-FAMILY: 'Verdana','sans-serif'; COLOR: #333333; FONT-SIZE: 9pt">In an
email sent just three days before the Deepwater Horizon exploded, the onshore
<SPAN style="mso-bidi-font-weight: bold"><b>BP</b></SPAN> manager in charge of
the drilling rig warned his supervisor that last-minute procedural changes were
creating "chaos". April emails were given to government investigators by <SPAN
style="mso-bidi-font-weight: bold"><b>BP</b></SPAN> and reviewed by The Wall
Street Journal and are the most direct evidence yet that workers on the rig
were unhappy with the numerous changes, and had voiced their concerns to <SPAN
style="mso-bidi-font-weight: bold"><b>BP</b></SPAN>’s operations managers in
Houston. This raises further questions about whether <SPAN
style="mso-bidi-font-weight: bold"><b>BP</b></SPAN> managers properly
considered the consequences of changes they ordered on the rig, an issue
investigators say contributed to the disaster.</SPAN></p><br/>
我正在将其写入 Asponse.PDF,但 HTML 标记显示在 PDF 中。如何删除它们?
【问题讨论】:
我试过 HTMLDecode,没用 你需要 HTML 编码来转义标签。 您要去除标签还是应用格式? dotnetperls.com/remove-html-tags 【参考方案1】:警告: This does not work for all cases and should not be used to process untrusted user input.
using System.Text.RegularExpressions;
...
const string HTML_TAG_PATTERN = "<.*?>";
static string StripHTML (string inputString)
return Regex.Replace
(inputString, HTML_TAG_PATTERN, string.Empty);
【讨论】:
-1 您不应该使用正则表达式来解析像 HTML 这样的上下文无关语法。如果 HTML 是由某个外部实体提供的,那么它很容易被操纵以规避您的正则表达式。public static string StripTagsCharArray(string source) char[] array = new char[source.Length]; int arrayIndex = 0; bool inside = false; for (int i = 0; i < source.Length; i++) char let = source[i]; if (let == '<') inside = true; continue; if (let == '>') inside = false; continue; if (!inside) array[arrayIndex] = let; arrayIndex++; return new string(array, 0, arrayIndex);
比 Regex 快 8 倍左右
@capdragon 此外,人们从他们在 SO 上看到的示例推断。最终有人会阅读并尝试重写它以删除
如果你想要有效的 HTML5,<p data-foo=">">Bar</script>
怎么样?但请记住,有些人会使用您的代码来处理来源不明的 HTML,并且 HTML 不保证是有效的!如果您以“警告:这不适用于所有情况并且不应用于处理不受信任的用户输入”作为开头,我会支持您的回答。我怀疑你有 58 票赞成,因为地球上的 58 个人(活着的和死去的)要么不知道或不介意你的解决方案不正确的测试用例。
@mehaase 很公平。我做了更改,谢谢。【参考方案2】:
你应该使用HTML Agility Pack:
HtmlDocument doc = ...
string text = doc.DocumentElement.InnerText;
【讨论】:
我真的不明白为什么人们会给出使用敏捷包的答案,因为正文的 .InnerText (作为示例)不会呈现无标记字符串。 SO上有很多人获得了敏捷包然后想知道为什么他们仍然盯着标记,脚本标签。 似乎对我很有效。当然比上述任何解决方案都更优雅。 这个解决方案只是移除了包装的 HTML 标签,不保证所有的标记都会被移除以上是关于删除字符串中的 HTML 标签 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法从 JavaScript 中的字符串中删除 html 标签? [复制]
从 Javascript/React Native 中的多个字符串数组中删除 html 标签