Javascript или регулярное выражение, чтобы сделать разметку XHTML-совместимой

У меня есть встроенный редактор разметки, встроенный в мой веб-сайт, который должен создавать разметку, совместимую с XHTML. Но, как видите, он использует устаревший тег font и атрибут size.

<font style="font-family: Courier New; color: rgb(0, 0, 153);" size="2">
   asdfa
   <span style="color: rgb(0, 51, 0);">
    a
    <font size="5">fds</font>
   </span>
</font>

В других браузерах он выдает <span class="Apple-style-span" style="font-size: xx-large;"> вместо <font size="5">

Есть ли решение Javascript/Regex для взятия первого набора разметки и замены его разметкой, совместимой с XHTML, с использованием атрибута style и тега span. Заранее спасибо!!

(ps. jQuery тоже можно использовать)


person Kyle    schedule 01.09.2010    source источник
comment
Лучше починить сам редактор, исправить проблему, а не симптомы... какой редактор используете?   -  person Nick Craver    schedule 01.09.2010
comment
@Ник Это правда. НикПравить. Я подумал, что если разработчик не исправит это, я буду в полной растерянности :) Согласно веб-сайту, вывод XHTML является экспериментальным. nicedit.com   -  person Kyle    schedule 01.09.2010
comment
Это допустимо для XHTML 1.0 Transitional. :D   -  person Gumbo    schedule 01.09.2010


Ответы (3)


Приведенная выше разметка полностью действительна в XHTML 1.0 Transitional.

Используются ли устаревшие элементы, такие как <font>, полностью ортогональны тому, используется ли синтаксис XHTML или HTML. XHTML 1.0 — это не что иное, как переформулировка HTML 4.01 в синтаксисе XML: следовательно, существуют варианты Transitional и Strict, как и для HTML 4.

<font size="5"> и <span class="Apple-style-span" style="font-size: xx-large;"> семантически одинаково бесполезны. Если вы хотите, чтобы разметка использовала набор определенных элементов и классов, которые имеют смысл в контексте вашего сайта, вам придется взломать редактор, чтобы он использовал их, а не основывался исключительно на визуальном форматировании.

Вы можете разобрать XHTML и изменить его на более позднем этапе, чтобы он выглядел лучше. Но регулярное выражение вовсе не является адекватным инструментом для этого, как упоминалось ранее. Вам понадобится синтаксический анализатор XML, затем вы исправите элементы и атрибуты, а затем повторно сериализуете их в XHTML. Было бы разумно сделать это на стороне сервера, потому что получить синтаксический анализатор XML на стороне клиента немного сложно, и вам все равно придется делать это на стороне сервера, если вы собираетесь очищать не внесенные в белый список элементы и атрибуты.

person bobince    schedule 01.09.2010
comment
Спасибо за подробное объяснение! - person Kyle; 02.09.2010

Я бы не рекомендовал REGEX для такой работы. (см.: лучший 'Regex для анализа HTML ' никогда не отвечайте!) Я знаю, вы не говорите о полноценном синтаксическом анализаторе, но я все же думаю, что вам будет лучше всего использовать JavaScript (или любой другой внутренний язык, который вы используете) и библиотеку, предназначенную для парсинг хтмл.

Вы можете посмотреть проект с открытым исходным кодом Tidy на Sourceforge. Введение/обзор в IBM: «Преобразование из HTML в XML с помощью HTML Tidy< /а>».

person S.Jones    schedule 01.09.2010

Проверьте CKEDITOR, если есть возможность внедрить в свое приложение другой WYSIWYG-редактор.

person Jan.    schedule 01.09.2010
comment
CK Editor и TinyMCE не соответствуют нашим требованиям. - person Kyle; 01.09.2010