2009-06-11 4 views
0

У кого-нибудь есть хороший способ найти, содержит ли строка неправильный XHTML с помощью Javascript?Поиск искаженного XHTML с Javascript

Поскольку моя страница позволяет «пользователь» генерироваться XHTML возвращает (пользователи могут доверять) и вводит его в DOM, я хочу способ проверить, если есть незакрытые или чрезмерно закрытые теги, и кодировать их как < и >, чтобы он просто отображал ошибки как текст. Таким образом, все действительные xhtml все равно будут отображаться, а недопустимый будет просто текстовыми узлами, что позволит сценарию, по крайней мере, продолжить с ошибками.


Вот аналогичный метод, который я сделал, что довольно грубо. Она имеет различные цели (просто вскрышных все допустимые теги Xhtml и оставляя все остальное. Она работает рекурсивно выбирая внутренние большинство тегов и зачистки их.

stripHTML: function(html) { 
    var validXHTML = /<(\S+).*>(.*?)<\/\1>/i; 
    var validSelfClose = /<(input|img|br|hr)[^>]*\/>/gi; 

    html = html.replace(validSelfClose, ''); 

    if(validXHTML.test(html)) { 
    var loc = html.search(validXHTML); 
    var str = html.match(validXHTML); 
    html = html.substr(0, loc) + 
      strings.addPunctuation(html.substr(loc, str[0].length).replace(validXHTML, '$2')) + 
      html.substr((loc+str[0].length), html.length); 

    if(validXHTML.test(html)) { 
     html = strings.stripHTML(html); 
    } else { 
     return html; 
    } 
    } 
    return html; 
} 

Вы можете улучшить выше, или ответ собственно вопрос.


Update

Моя идея для простого способа, по крайней мере вместить в большинстве случаев это:

закодировать все> и < не то, что закрыть или открыть ничего,

изменить все теги наименований внутри <> в нижнем регистре

работает рекурсивно , начните с самими внутренними тегами, изменить их из нижнего регистра в верхний регистр <li>something</li> становится <LI>something</LI>

после рекурсии отделки, вырезать все другие> и <

переключить все теги в верхнем регистре назад в нижний регистр

Есть ли какие-либо проблемы, которые были немедленно предвидены, кроме того, что это займет много времени?

+0

попробуйте также разместить код в refactormycode.com –

+0

Одна из проблем, любая такая программа будет иметь решает, какие теги являются ошибочными те ... Рассмотрим фрагмент hi; какие теги вы хотите кодировать? – Stobor

+0

@Strobor, я ленив, но я бы попробовал этот конкретный бит кода во множестве разных браузеров и посмотрел, что они делают. Я подозреваю, что большинство из них поймет это внутренне как привет

ответ

0

Я делаю это на сервере с HTMLTidy

htmltidy -asxhtml 
+0

Кажется хорошим проектом, но я не могу использовать его как часть xhtml-страницы. –

+0

, но поскольку вы уже сказали, что используете XHR в другом комментарии, не можете ли вы просто опубликовать неверный (x) html на свой собственный tidy.cgi? htmltidy может исправить почти все и что он не может исправить ваш скрипт, вероятно, не будет намного лучше. Конечно, он добавляет, возможно, 2 секунды к действию submit/save, но действительно ли это будет проблемой? – SpliFF

+0

Кстати, есть проект под названием jTidy, который, вероятно, может запускать «на сайте» как Java-апплет, но я не думаю, что проект активно поддерживается, и я его не использовал. – SpliFF

0

Так генерация HTML также происходит на стороне клиента? Лучше всего проверять генерируемую разметку в самом источнике.

Если нет, возможно, есть способ запрограммировать валидатор W3C.

http://validator.w3.org/#validate_by_input

также видеть, http://www.w3.org/QA/Tools/

+0

HTML, генерируются после загрузки, захватывая его из сценария файл с помощью xmlhttp.У меня есть возможность проверить его на сайте, отправив его на w3c и ожидая ответа не будет. Не говоря уже о том, что мне просто нужно t o проверить теги, а не документ, так как w3c всегда будет возвращать входные теги как недопустимые. –

Смежные вопросы