[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Подскажите как сделать валидацию HTML (не с tidy)
Hillel
Короче, у меня есть блог который разрешает некоторые теги, но не имеет под собой проверку на XML валидность.

То есть, любой гад не закроет тег <strong> например, и вся страничка теперь будет жирная.

Буду рад узнать есть ли такой готовый класс или готовая функция?

Спасибо !



Спустя 8 часов, 34 минуты, 27 секунд (28.03.2010 - 11:23) krasilich написал(а):
Что именно подразумевается под валидацией?

Валидация процесс то творческий=)

Если нужно только проверить все существующие теги на "закрытость" - это делаеться одной (не очень простой, правда) регуляркой.
Сейчас так сходу не напишу, но нужно что-то наподобии

preg_match('|\<(.*?)\>(?:.*)\<\/$1\>|is', $input, $matches);


Это точно не будет работать, если используются атрибуты тегов.

Спустя 20 минут, 13 секунд (28.03.2010 - 11:43) Hillel написал(а):
Цитата (krasilich @ 28.03.2010 - 08:23)
Что именно подразумевается под валидацией?

Валидация процесс то творческий=)

Если нужно только проверить все существующие теги на "закрытость" - это делаеться одной (не очень простой, правда) регуляркой.
Сейчас так сходу не напишу, но нужно что-то наподобии
<pre class="sh_sourceCode" rel="php">
<span class="sh_function">preg_match</span><span class="sh_symbol">(</span><span class="sh_string">'|\<(.*?)\>(?:.*)\<\/\>|is'</span><span class="sh_symbol">,</span> <span class="sh_variable">$input</span><span class="sh_symbol">,</span> <span class="sh_variable">$matches</span><span class="sh_symbol">);</span>
</pre>

Это точно не будет работать, если используются атрибуты тегов.

Да, мне надо проверить на закрытность, но чтобы он пропускал одиночные теги. И атрибуты тоже имеются.

У меня вот такие теги:
    public static $tags = array(
'a' => array('href', 'target', 'name'),
'img' => array('src', 'alt'),
'b' => array(),
'strong' => array(),
'em' => array(),
'i' => array(),
'ul' => array(),
'li' => array(),
'ol' => array(),
'p' => array(),
'br' => array()
);


из которых BR и IMG одинарные.

Проблема в том, что если не закрыть какой-то тег, то это ломает html.

Мне говорили о tidy, для её установки мне надо в хостинг звонить, и кроме этого я ещё не понял как там всё работает.

Я надеялся найти готовое решение функции/класса. Скорее всего здесь regex нужет, а я в нём не так силён.

Буду рад любой помощи. Это мой первый самостоятельный блог, надеюсь я его доведу до конца.

Спасибо.

Спустя 57 минут, 18 секунд (28.03.2010 - 12:40) krasilich написал(а):

$tag_list = '';
foreach($tags as $tag => $attr)
$tag_list .= $tag.'|';
$tag_list = rtrim($tag_list, '|');

if(preg_match_all("|\<(".$tag_list.")(\/\>|\>(.*)\<\/$1\>)|is", $input_str))
echo 'ALL OK!';


не знаю насколько это рабочий код, но, думаю, идею почерпнуть можно.

ЗЫ. Не... код не обработает вложенные теги... пошел дальше думать....
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.