Существуют ли аккуратные версии HTML для JavaScript или Ruby?

Существует ли библиотека, похожая на HTML tidy (http://tidy.sourceforge.net/), которая не зависит от ОС (необходимо компилировать на каждом хосте). В основном я просто хочу проверить/очистить HTML, отправленный мне пользователем.

<p>hello</p></p><br>

должен стать

<p>hello</p>
<br/>

Что-то в javascript или ruby ​​сработало бы для меня. Спасибо!


person montrealmike    schedule 21.11.2010    source источник


Ответы (6)


В Ruby вы можете анализировать HTML-код в Nokogiri, что позволит вам проверить наличие ошибок, а затем вывести HTML-код, который очистит отсутствующие закрывающие теги и тому подобное. Обратите внимание, что в следующем HTML-коде теги title и p закрыты неправильно, но Nokogiri добавляет закрывающие теги.

require 'nokogiri'

html = '<html><head><title>the title</head><body><p>a paragraph</body></html>'
doc = Nokogiri::HTML(html)
puts "Errors found" if (doc.errors.any?)
puts doc.to_html
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
# >> <html>
# >> <head>
# >> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
# >> <title>the title</title>
# >> </head>
# >> <body><p>a paragraph</p></body>
# >> </html>

В качестве альтернативы вы можете открыть соединение с /usr/bin/tidy и поручить ему сделать всю грязную работу:

require 'open3'

html = '<html><head><title>the title</head><body><p>a paragraph</body></html>'

stdin, stdout, stderr = Open3.popen3('/usr/bin/tidy -qi')
stdin.puts html
stdin.close
puts stdout.read
# >> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
# >> 
# >> <html>
# >> <head>
# >>   <meta name="generator" content=
# >>   "HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 15.3.6), see www.w3.org">
# >> 
# >>   <title>the title</title>
# >> </head>
# >> 
# >> <body>
# >>   <p>a paragraph</p>
# >> </body>
# >> </html>
person the Tin Man    schedule 22.11.2010
comment
Loopah — еще один драгоценный камень, созданный на основе Nokogiri, который выполняет санитарную обработку. - person the Tin Man; 22.11.2010
comment
sanitize gem (github.com/rgrove/sanitize) использует nokogiri и работает (спасибо!). Кто-нибудь знает что-то, что могло бы работать на стороне клиента, чтобы обеспечить им мгновенную обратную связь. - person montrealmike; 26.11.2010
comment
Что вы представляете, когда говорите «мгновенная обратная связь»? Мгновенное обновление в их браузере? Это будет вызов AJAX для обновления содержимого блока <div>. - person the Tin Man; 26.11.2010
comment
true, но это будет включать сохранение ввода обратно на сервер, а затем его повторный рендеринг (например, невозможно для обновления при каждом нажатии клавиши). Если действительно нет дезинфицирующих средств javascript, я реализую что-то в AJAX. Спасибо - person montrealmike; 30.11.2010
comment
Что-то нашел! код. google.com/p/closure-library/source/browse/trunk/closure/ - person montrealmike; 30.11.2010

Вы проверяли это раньше? http://tidy.rubyforge.org/

person βξhrαng    schedule 22.11.2010
comment
да, но проблема в следующем: Tidy.path = '/usr/lib/tidylib.so', который нужно скомпилировать для хоста - person montrealmike; 22.11.2010

html-tidy был скомпилирован в javascript (используя emscripten).

См. демонстрацию и загрузите tidy.js.

Если вы достаточно смелы, вы можете скомпилировать его в javascript самостоятельно с нужными параметрами. См. https://github.com/lovasoa/tidy-html5.

person lovasoa    schedule 08.12.2014

Существует порт java JTidy, но я не знаю других портов, возможно, вы каким-то образом называете HTML tidy из Ruby, который работает для вас, возможно, вызовите приложение html tidy в командной строке из вашего веб-приложения ruby.

person 3urdoch    schedule 21.11.2010
comment
Да я знаю это! я просто упоминаю, что это единственный порт, о котором я знаю. - person 3urdoch; 22.11.2010
comment
к сожалению, я не могу установить java на свой хост (иначе это может сработать), но спасибо - person montrealmike; 22.11.2010

Подойдет ли вам W3 Validator?

Или вы хотите что-то исправить ошибки?

person vol7ron    schedule 21.11.2010

Если вы просто хотите улучшить внешний вид, используйте Pretty Diff.

http://prettydiff.com/?m=beautify&html

person austincheney    schedule 10.12.2011