XHTML validator (частичного кода)

Solid

Drosera anglica
XHTML validator (частичного кода)

Как, по вашему, лучше всего проверять на валиндность часть кода XHTML?
Т.е. к примеру, есть код:
Код:
Код, который <b><i>не</b> пройдёт</i> валидацию.
Он не пройдёт валидацию, потому что закрывающий тег i находиться за другим закрывающим тегом (т.е. вне тега b, где тег i был открыт).
 

denver

?>Скриптер
Ну уж не знаю, смотря для каких целей.
Вот какой-то сторонний валидатор:
http://www.bermi.org/xhtml_validator
 

Solid

Drosera anglica
denver
В процессе поиска уже натыкался...
Требуется, что бы в XML передавался только правильный XHTML.
По этому перед тем, как записать в базу (к примеру комментарии от пользователя), проверяем их через XHTML валидатор. Если непроходит, то возвращаем ошибку... и говорим пользователю, что б исправил.
BBCode'ы использовать не хочу, т.к. считаю их излишними. Думаю, кому действительно надо, тот сможет написать обычный тег без всяких там [] и прочей лабуды.
 

Solid

Drosera anglica
alexei.lexx
Вы читали вопрос? В любом случае, использование расшерения tidy ещё более-менее оправданно, но использовать валидатор на сайте w3c через скрипт просто глупо и бесмысленно.
 

denver

?>Скриптер
Solid
По этому перед тем, как записать в базу ... проверяем их через XHTML валидатор
Здесь у тебя следственная ошибка. Из-за того что невалидный xhtml вызывает ошибку при выводе - не следует что нужно приводить его к валидному еще перед записью в базу, хоть это и кажется единственным решением. А предпринимать что-то нужно непосредственно перед выводом (как минимум потому что в базу теоретически должно и можно будет записать не только через твой скрипт). Решение в твоем случае совсем простое: выводить пользовательский невалидный HTML обрамляя его в <![CDATA[ ... ]]>. Для этого, собственно, данная конструкция и была придумана.
 

Solid

Drosera anglica
denver
Зачем каждый раз тратить время на валидацию перед выводом, когда можно проверить данные на правильность всего лишь один раз, да ещё и сообщить об этом пользователю?
Решение не совсем простое, т.к. используется XSLT и xsl:copy-of, который при неправильном коде (XHTML, который будет из базы писаться в XML) выведет ошибку при XSL трансформации. Тем более, я считаю, что только так можно бороться с кривым кодом, которого, к сожалению, в интернете стало ну уж слишком много. Конечно же, можно перед тем, как вставлять в базу делать tidy_clean_repair(), однако появляется возможность, что вставленные данные будут не совсем соответствовать данным, которые ожидает пользователь. По этому, как мне кажеться, самый лучший способ это использовать мой пример. К тому же, поверх всего этого, используется не только XML, но и JSON. А в JSON, насколько вы знаете, нет такого понятия, как CDATA. Так что приходится идти на небольшие извращения, хотя я бы их лучше назвал ухищрениями.
 

denver

?>Скриптер
проверить данные на правильность всего лишь один раз, да ещё и сообщить об этом пользователю?
Пользователь будет рад узнать что <br> теперь запрещены по всему интернету.

Зачем каждый раз тратить время на валидацию перед выводом
1. Затем что это проблема отображения, а не записи в базу.
2. Затем что глупо расчитывать что в базе всегда будет well-formed XHTML.

Решение не совсем простое, т.к. используется XSLT и xsl:copy-of,
Я в курсе данной проблемы и именно поэтому я написал то простое решение которое написал. И оно работает если поискать в нете как выводить CDATA правильно, чтобы в результирующем коде никаких CDATA не было а был невалидный HTML.

Тем более, я считаю, что только так можно бороться с кривым кодом, которого, к сожалению, в интернете стало ну уж слишком много.
А, так вы идеалист... :)
 

WP

^_^
Не понимаю кому от этого хуже =) От того что код не совсем соответствует стандарту? Броузеры ведь понимают, и это главное. Давай еще придумаем валидатор PHP-кода который будет ругаться на лишний пробел, или его отсутствие.
 

Solid

Drosera anglica
denver
И оно работает если поискать в нете как выводить CDATA правильно, чтобы в результирующем коде никаких CDATA не было а был невалидный HTML.
Возможно в libxml2 и IE6 работает, однако ж в gecko disable-output-escaping отключен, что, в прицнипе, правильно.
Почему нормальные web-developer'ы выбирают Firefox, как эталон для просмотра веб-страниц (а уже потом подтачивают под Safari, Opera и IE)? Одна из причин, это чёткая стандартизация всех технологий, будь то XHTML, CSS или XSLT. disable-output-escaping - один из аттрибутов, который нерекомендован консорциумом W3C, и разработчики Gecko правильно сделали, что не реализовывали данной "фитчи" с самого начала.
Затем что это проблема отображения, а не записи в базу.
Это проблема и отображения, и записи в базу. Ещё раз повторяю, надо приучить пользователя писать правильный код. Пусть со мной не согласятся, что, якобы, надо делать всё, только что бы жизнь пользователя была легка и пушиста. Однако, в таком случае, конечно же, можно попробовать использовать tidy_clean_repair.
Затем что глупо расчитывать что в базе всегда будет well-formed XHTML.
Глупо расчитывать, если где-то будет упущенная проверка. С другой стороны, опять же, можно проверять на валидный код, и если же он не проходит, то можно его чистить при помощи tidy.
Пользователь будет рад узнать что <br> теперь запрещены по всему интернету.
Правильно. Надо писать <p>Здесь ваша реклама.</p>

-~{}~ 02.12.06 03:40:

Давай еще придумаем валидатор PHP-кода который будет ругаться на лишний пробел, или его отсутствие.
Уже есть. И я считаю, что было бы очень правильно, особенно некоторым "особо правильным личностям", использовать стандарты-кодирования в PHP. (http://pear.php.net/package/PHP_CodeSniffer)
Не понимаю кому от этого хуже =) От того что код не совсем соответствует стандарту? Броузеры ведь понимают, и это главное.
XSLT от этого ой как нехорошо; да его просто коробит от кода, который ему предлагают на съедение.
 

WP

^_^
> Уже есть. И я считаю, что было бы очень правильно
Но зачем такая глупость непонятно.

Imho, XSLT это ой как нехорошо. Но это не топик)
 

Solid

Drosera anglica
WP
Те тема для разговора, но я бы ещё поспорил (хотя чего спорить)... хотя бы только потому, что это единственный стандартизированный шаблонизатор... ну или единственный стандартизированный и поддерживаемый уже многими браузерами и языками программирования (имеется ввиду существуют библиотеки и расширения), который можно использовать как шаблонизатор.
...Но это уже оффтоп.
 

denver

?>Скриптер
в gecko disable-output-escaping отключен, что, в прицнипе, правильно
Ты в курсе что XSLT предназначен НЕ только для вывода XML? Или по-твоему он никогда не сможет (и даже не должен уметь) вывести в результате своей работы что-то типа:
<? xml version="666.0" encoding+decoding ?>
<<<<1>&text</2 ="2"></aaa><#aaa>>>>

Слава богу XSLT придумывали не такие идеалисты (педанты и пособники андроидов :)) которые признают только XHTML. Solid, ты типичный представитель пострадавших от неправильного понимания пользы и вреда disable-output-escaping'а. В данном случае ты спокойно можешь его использовать.
 

.des.

Поставил пиво кому надо ;-)
Автор оригинала: Solid
Почему нормальные web-developer'ы выбирают Firefox, как эталон для просмотра веб-страниц (а уже потом подтачивают под Safari, Opera и IE)? Одна из причин, это чёткая стандартизация всех технологий, будь то XHTML, CSS или XSLT. disable-output-escaping - один из аттрибутов, который нерекомендован консорциумом W3C, и разработчики Gecko правильно сделали, что не реализовывали данной "фитчи" с самого начала.
Меня эти сказки от разработчиков firefox или их фанатов порядком начинают раздражать.
Посмотрите, что делает соответствующий всем стандартам Firefox с этим тестом

http://www.webstandards.org/files/acid2/test.html

и для сравнения взгляните на Safari и Opera
 

hermit_refined

Отшельник
imho, надо проверять на валидность html, и - если требуется - потом преобразовывать в xhtml.
 
Сверху