2010-11-18 3 views
3

данные, представленные в формате HTML и отправленные на сервер, что делает некоторую предварительную обработку.Проблема с незакрытым тегом img

Он работает с атрибутом «src» тега «img».

После предварительной обработки и сохранения все предварительно обработанные теги «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 это выглядит так же.

Как решить эту проблему?


Update 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

О, спасибо! Я полностью забыл об этом пространстве имен. Это было оставлено после copy-paste, которое было сделано много месяцев назад. – AntonAL

0

В функции препроцесса, которую вы делегируете, у вас нет контроля над каждым тегом img? Не можете ли вы вернуть то, что оно уже возвращает, и добавить явный тег закрытия?

+0

Конечно, я могу разобрать все руками, используя сложные регулярные выражения и т.д. Но, эта задача должна быть в библиотеке, я использую – AntonAL

2

Проблема в том, что ваши библиотеки генерируют правильный HTML, а конечный «/» неверен в HTML. Если вы не используете приложение/xhtml + xml, нет никакого смысла его там вообще - тег IMG самозакрывается во всех версиях HTML, а «/» не имеет смысла. Если вы : обслуживающее приложение/xhtml + xml, я думаю, вам нужно явно использовать Nokogiri's to_xhtml.

+0

см Update 1 в моем вопросе – AntonAL

+0

@AntonAL: Так что вы служите XHTML вместо HTML. Как я уже сказал, в этом случае вам нужно будет генерировать XHTML вместо HTML. Или используйте HTML. Вам просто нужно выбрать один и придерживаться его. – Chuck

Смежные вопросы