Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RubyGem可以快速验证部分HTML代码片段吗?_Html_Ruby On Rails_Ruby - Fatal编程技术网

RubyGem可以快速验证部分HTML代码片段吗?

RubyGem可以快速验证部分HTML代码片段吗?,html,ruby-on-rails,ruby,Html,Ruby On Rails,Ruby,我正在Rails中制作一个定制的准CMS,我们希望有一个字段可以作为代码中的HTML片段进行编辑(管理界面将在前端使用CodeMirror)。当它呈现给最终用户时,它将是html\u safe'd并插入到div中。我们相信我们的内容编辑器不会恶意,但确保他们创建的是有效的html,这样他们就不会破坏页面,特别是因为他们对编码相对较新 作为第一次尝试,我将使用Hash.from_xml并将异常作为自定义验证器进行解救。但是有没有更好和/或更优化的方法(即gem)来检查它是否是有效的HTML 谢谢

我正在Rails中制作一个定制的准CMS,我们希望有一个字段可以作为代码中的HTML片段进行编辑(管理界面将在前端使用CodeMirror)。当它呈现给最终用户时,它将是
html\u safe
'd并插入到div中。我们相信我们的内容编辑器不会恶意,但确保他们创建的是有效的html,这样他们就不会破坏页面,特别是因为他们对编码相对较新

作为第一次尝试,我将使用
Hash.from_xml
并将异常作为自定义验证器进行解救。但是有没有更好和/或更优化的方法(即gem)来检查它是否是有效的HTML


谢谢

您可能想要或(class-method
sanitize

我想这可能就是您想要的

您可以使用库(和)在模型中创建验证器。在片段上使用Nokogiri并不完美(因此您可能希望添加覆盖验证器的功能),但它将捕获许多可能破坏页面的明显错误

示例(假设模型属性/字段名为
content
):


与其进行验证,不如使用能够修复标记的Nokogiri:

require 'nokogiri'
html = '<div><b>Whoa</i>'
Nokogiri::HTML::DocumentFragment.parse(html).to_html
#=> "<div><b>Whoa</b></div>"
需要“nokogiri”
html=‘哇’
Nokogiri::HTML::DocumentFragment.parse(HTML).to_HTML
#=>“哇”

似乎是这样,我更愿意依靠内部的东西,但这是一个好的开始!这似乎是完美的,我们正在寻找-不知道Nokogiri可以处理碎片!另外,考虑到修复标记,我发现它是建立在Nokogiri功能的基础上的,允许对允许的标记类型进行更细粒度的控制。谢谢有较短的语法:
Nokogiri::HTML.fragment(HTML)。to_HTML
什么是
:base
?如何使用nokogiri提供的实际错误消息添加错误消息?
:base
表示针对整个模型的错误。您还可以针对特定字段标记错误。如果该字段是内容,那么以下内容实际上可能更好
错误。添加(:content,“Custom Error Message”)
。如果要添加Nokogiri的错误,则可以处理
doc.errors
并以您认为有用的任何方式添加它们。要将每个错误添加到模型中,可以执行
doc.errors.each{nokogiri_error | errors.add(:content,nokogiri_error)}
。我不确定Nokogiri的错误是什么样子,也不确定这是否是个好主意。
require 'nokogiri'
html = '<div><b>Whoa</i>'
Nokogiri::HTML::DocumentFragment.parse(html).to_html
#=> "<div><b>Whoa</b></div>"