正则表达式删除HTML标记的问题

时间:2009-02-12 23:34:39

标签: ruby regex string encoding

在我的Ruby应用程序中,我使用以下方法和正则表达式从字符串中删除所有HTML标记:

str.gsub(/<\/?[^>]*>/,"")

这个正则表达式完成了我所期待的所有内容,除了它导致所有引号转换为&#8220; 并将所有单引号更改为&#8221;

将杂乱的代码转换回正确的字符时,我错过了哪些显而易见的事情?

编辑:无论有没有正则表达式都会出现问题,所以很明显我的问题与它无关。我现在的问题是如何处理这种格式错误并纠正它。谢谢!

5 个答案:

答案 0 :(得分:5)

执行正则表达式替换后使用CGI :: unescapeHTML:

CGI::unescapeHTML(str.gsub(/<\/?[^>]*>/,""))

请参阅http://www.ruby-doc.org/core/classes/CGI.html#M000547

在上面的代码段中,gsub会删除所有HTML标记。然后,unescapeHTML()将所有HTML实体(例如&lt;,&amp;#8220)恢复为它们的实际字符(&lt;,quotes等)

关于此页面上的其他帖子,请注意您永远不会传递HTML,例如

<tag attribute="<value>">2 + 3 < 6</tag>

(这是无效的HTML);你会收到的是:

<tag attribute="&lt;value&gt;">2 + 3 &lt; 6</tag>

对gsub的调用会将上述内容转换为:

2 + 3 &lt; 6

unescapeHTML将完成这项工作:

2 + 3 < 6

答案 1 :(得分:2)

当你看到类似的东西时,你会遇到更多麻烦:

<doohickey name="<foobar>">

您需要应用以下内容:

gsub(/<[^<>]*>/, "")

...只要模式匹配。

答案 2 :(得分:2)

  

这个正则表达式几乎就是这样   我只是期待它,除了它   引起所有引号   变成了“和所有   单引号要更改为“   

这听起来好像RegExp会这样做。你确定它之前有所不同吗?

在这里查看这个问题以获得有关问题的信息,它有一个很好的答案:
Get non UTF-8 form fields as UTF-8 in php.

答案 3 :(得分:0)

我遇到类似的字符更改问题,这发生在我的代码运行另一个强制执行UTF-8编码的模块时,然后当它返回时,我有一个不同的文件(slurped数组行)手中。

答案 4 :(得分:-3)

您可以使用多次通过系统来获取您要查找的结果。

运行正则表达式后,运行表达式将&amp; 8220; 转换为引号,将另一个表达式转换为&amp; 8221; 转换为单引号。