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>
4

2 回答 2

4

我认为问题在于您的<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>
于 2010-11-19T01:23:21.007 回答
2

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

除非您正在服务application/xhtml+xml,否则根本没有任何意义。IMG 标签在所有版本的 HTML 中都是自闭合的,“/”是没有意义的。

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

于 2010-11-18T23:48:54.940 回答