未封闭的img标签问题

时间:2010-11-18 23:37:57

标签: ruby-on-rails nokogiri hpricot

以HTML格式呈现并提交给服务器的数据,进行一些预处理。

它使用“img”标签的“src”属性进行操作。

预处理和保存后,所有预处理的“img”标签都不会自动关闭。

例如,如果“img”标记如下:

<img src="image.png" />
用Nokogiri或Hpricot预处理后,它将是:

<img src="/preprocessed_path/image.png">

代码非常简单:

doc = Hpricot(self.content)
doc.search("img").each do |tag|
  preprocess tag
end
self.content = doc.to_html

对于Nokorigi来说,它看起来是一样的。

如何解决此问题?


更新1

忘记提及 - 我有HTML 5页面,我正在尝试使用W3C Validator进行验证。

当“img”标签位于div内时,它会抱怨以下内容:

required character (found d) (expected i)
</div>

例如,尝试验证以下代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8" />
</head>
<body>
    <div>
        <img src="image.png">
    </div>
</body>
</html>

你会得到同样的错误:

Line 9, Column 4: required character (found d) (expected i)
</div>

3 个答案:

答案 0 :(得分:3)

我认为问题在于你的<html>,它将xmlns属性视为XHTML。这似乎与它不是XHTML文档的事实相矛盾。如果删除此xmlns属性,则该属性应该有效。

<!DOCTYPE html>
<html>
  <head>
  <meta charset="utf-8" />
  <title>something here</title>
</head>
<body>
  <div>
    <img src="image.png">
  </div>
</body>
</html>

答案 1 :(得分:2)

问题是您的库生成了正确的HTML,并且HTML中的尾部“/”不正确。除非你正在提供application / xhtml + xml,否则根本没有任何意义 - 所有版本的HTML中的IMG标签都是自动关闭的,而“/”则没有意义。如果您 提供application / xhtml + xml,我认为您需要明确使用Nokogiri的to_xhtml

答案 2 :(得分:0)

在您委派的预处理功能中,您是否无法控制每个img标签?你能不能返回它已经返回的内容并添加一个明确的关闭标记?