Проблема с незамкнутым тегом img - PullRequest
3 голосов
/ 19 ноября 2010

данные представлены в формате HTML и отправлены на сервер, который выполняет некоторую предварительную обработку.

Работает с атрибутом "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

Для Нокориги он выглядит так же.

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


Обновление 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 ]

3 голосов
/ 19 ноября 2010

Я думаю, что проблема в вашем <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 голосов
/ 19 ноября 2010

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

0 голосов
/ 19 ноября 2010

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

...