2010-11-18 81 views
3

以HTML格式呈现并提交给服务器的数据,该数据会进行一些预处理。img标签未封闭的问题

它使用“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

我认为问题出在您的<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> 
+0

哦,谢谢!我完全忘了这个名字空间。它是在复制粘贴之后留下的,这是在几个月前完成的。 – AntonAL 2010-11-19 02:52:53

0

在您正在委托的预处理函数中,您是否无法控制每个img标记?你能不能返回它已经返回的东西,并附加一个明确的关闭标签?

+0

当然,我可以通过解析手中的一切,使用复杂的正则表达式等等。但是,这个任务一定要达到图书馆,我使用 – AntonAL 2010-11-19 00:29:23

2

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

+0

看到更新1在我的问题 – AntonAL 2010-11-19 00:28:01

+0

@AntonAL:那么,你是服务XHTML而不是HTML。就像我说的那样,在这种情况下,您将需要生成XHTML而不是HTML。或者使用HTML。你只需要挑一个并坚持下去。 – Chuck 2010-11-19 02:06:56