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

btw*_*btw 5 ruby regex string encoding

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

str.gsub(/<\/?[^>]*>/,"")
Run Code Online (Sandbox Code Playgroud)

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

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

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

vla*_*adr 5

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

CGI::unescapeHTML(str.gsub(/<\/?[^>]*>/,""))
Run Code Online (Sandbox Code Playgroud)

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

在上面的代码段中,gsub删除了所有HTML标记.然后,unescapeHTML()将所有HTML实体(例如<,“)恢复为其实际字符(<,引号等)

关于此页面上的另一篇文章,请注意您永远不会传递HTML等

<tag attribute="<value>">2 + 3 < 6</tag>
Run Code Online (Sandbox Code Playgroud)

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

<tag attribute="&lt;value&gt;">2 + 3 &lt; 6</tag>
Run Code Online (Sandbox Code Playgroud)

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

2 + 3 &lt; 6
Run Code Online (Sandbox Code Playgroud)

而unescapeHTML将完成这项工作:

2 + 3 < 6
Run Code Online (Sandbox Code Playgroud)


Tim*_*Tim -3

您可以使用多遍系统来获得您正在寻找的结果。

运行正则表达式后,运行表达式来转换&8220; 到引号和另一个转换&8221; 到单引号。