У меня есть встроенный редактор разметки, встроенный в мой веб-сайт, который должен создавать разметку, совместимую с 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 тоже можно использовать)
Ответ 1 · рейтинг 2 · bobince
Приведенная выше разметка полностью действительна в 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 на стороне клиента немного сложно, и вам все равно придется делать это на стороне сервера, если вы собираетесь очищать не внесенные в белый список элементы и атрибуты.
Ответ 2 · рейтинг 1 · S.Jones
Я бы не рекомендовал REGEX для такой работы. (см.: лучший 'Regex для анализа HTML ' никогда не отвечайте!) Я знаю, вы не говорите о полноценном синтаксическом анализаторе, но я все же думаю, что вам будет лучше всего использовать JavaScript (или любой другой внутренний язык, который вы используете) и библиотеку, предназначенную для парсинг хтмл.
Вы можете посмотреть проект с открытым исходным кодом Tidy на Sourceforge. Введение/обзор в IBM: "Преобразование из HTML в XML с помощью HTML Tidy".