【问题标题】:Complete HTML Strip function完整的 HTML Strip 功能
【发布时间】:2015-05-04 10:37:34
【问题描述】:

我有一个这样的 HTML 字符串:

<p>First Sentence is this.&#160;Second sentence is this.</p>

我可以使用regex 函数从上述字符串中删除&lt;p&gt; 标签。

但是,如何从winforms 中的上述字符串中删除&amp;#160; - 编码字符

我不希望&amp;#160; 出现在输出中。

【问题讨论】:

  • 理解你复制粘贴的正则表达式吗?它根本不会触及&amp;#160;。您还需要取消编码 HTML 编码的实体。如何做到这一点有很好的记录。参见例如How can I decode HTML characters in C#?

标签: c# html .net regex winforms


【解决方案1】:

您可以使用XElement.Parse 来获取节点值,如下所示:

 var htmlString = "<p>First Sentence is this.&#160;Second sentence is this.</p>";
 var result = System.Xml.Linq.XElement.Parse(htmlString).Value;

如果不是所有的字符串都包含有效的 XML 结构,或者可能根本没有标签,你可以像这样添加假标签:

 var htmlString = "<p>First Sentence is this.&#160;Second sentence is this.</p>";
 var result = System.Xml.Linq.XElement.Parse("<root>" + htmlString + "</root>").Value;

结果:

您可能希望为此添加错误处理,但这显然比为此使用正则表达式更好。

编辑:

如果这仍然不起作用,而您只想处理实体,则可以利用 System.Web.HttpUtility.HtmlDecode 方法将 HTML 实体替换为文字:

var final_result = System.Web.HttpUtility.HtmlDecode(result);

【讨论】:

  • 我正在使用 winforms 并且 System.Xml.Linq 没有被填充。
  • 我认为添加对System.Xml.Linq.dll(也许是System.Xml.dll)的引用应该可以解决它。另外,尝试将using System.Linq;using System.Xml.Linq; 添加到 using 语句列表中。
  • 我现在尝试添加System.Xml.Linq dll。我得到的输出是&lt;p&gt;First Sentence is this.Second sentence is this.&lt;/p&gt;,也就是说,我现在得到的是html标签。
  • 你能告诉我你拥有的完整代码吗?使用pastebin.com,例如我猜你有&amp;lt;p&amp;gt; 而不是&lt;p&gt;,对吧?试试var result = System.Xml.Linq.XElement.Parse(htmlString.Replace("&amp;lt;", "&lt;").Replace("&amp;gt;", "&gt;").Replace("&amp;amp;", "&amp;")).Value;
  • 太棒了。我不反对使用正则表达式,尤其是。在这种情况下。也许,您也可以尝试使用HtmlDocument。我会测试,然后告诉你。
【解决方案2】:

考虑到输入是纯字符串的事实

string x = "<p>First Sentence is this.&#160;Second sentence is this.</p>";
x= x.Replace("&#160;"," ");

这太简单了,但会奏效。

【讨论】:

    猜你喜欢
    • 2014-12-14
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2016-04-19
    • 2016-11-16
    • 2017-02-20
    • 1970-01-01
    • 2018-04-12
    相关资源
    最近更新 更多