仅当字符串是HTML编码时解析



我有一种情况,在某些实例中,我在数据库列中接收HTML编码信息,在其他一些实例中,我接收常规文本。

我有这样的代码:

my_string = Nokogiri::HTML.parse(my_string).text

如果my_string是html编码的,则此工作,但如果它是常规文本则不工作。

我是否可以执行以下检查?

如果html_encoded, Nokigiri::HTML。解析else,返回my_string。

我开始觉得Rails处理这个问题很奇怪。下面是我的模型代码:

  def show_name
    name = Nokogiri::HTML.parse(name).text
    name
  end

下面是我的视图代码:

  <tbody>
    <% names.each do |t| %>
      <tr class="<%= return_cd_error?(t.show_return_cd) ? 'error' : '' %>">
        <td><%= t.name %></td>
      </tr>
    <% end %>

如果在名称前使用binding.pry,则在解析前后返回名称"John Doe",这很奇怪:

[2] pry(#<Test::Sess>)> name
=> "Hugh Geissler"
[3] pry(#<Test::Sess>)> name =  Nokogiri::HTML.parse(name).text
=> ""

但是,如果我删除Nokogiri解析代码,它显示良好。

没有定义什么是HTML编码,什么不是HTML。在XML中有定义嵌入标记的方法,但在HTML中没有。

相反,您可以嗅探文本并确定是否存在编码前缀,例如"&#",或者,甚至不关心,直接解码它。

Nokogiri 可以解码编码的HTML,但它不会是我解码它的第一个工具。相反,像CGI::unescapeHTML(str)这样的东西,从Ruby的CGI标准库可以做到这一点。更多信息请参见"如何在Ruby中编码/解码HTML实体?"

相关内容

  • 没有找到相关文章

最新更新