带有未关闭img标签的问题

问题描述 投票:3回答:3

以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>
ruby-on-rails nokogiri hpricot
3个回答
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>

2
投票

问题是您的库正在生成正确的HTML,而尾部的“ /”在HTML中不正确。

除非您正在提供application/xhtml+xml,否则根本没有意义。 IMG标签在所有版本的HTML中都是自动关闭的,“ /”是没有意义的。

如果您are服务application/xhtml+xml,我认为您需要明确使用Nokogiri的to_xhtml


0
投票

在您要委托的预处理功能中,您是否无法控制每个img标签?您是否不能返回已经返回的内容并附加一个显式的</img>关闭标签?

© www.soinside.com 2019 - 2024. All rights reserved.