[PHP] Восстановление некорректного HTML

walder

Пример:
С помощью curl получаю некую страницу, которую надо распарсить.
В её тексте встречается такое:
<td align="right valign=middle" bgcolor="red" class=ttt>
Т.е. кавычки могут стоять, могут не стоять, а могут стоять частично.
Как лучше восстановить текст (расставить там, гд неадо кавычки написать свою функцию или preg_replace использовать?
Пытался реализовать с помощью последнего - не получилось.
Какие есть соображения на этот счёт?

evgen5555

А ф чом, собственно, проблема?
Составляешь список ключевых слов (рекомендованных W3C а потом расставляешь по бокам от них внутри тегов кавычки.

walder

а если это значение параметра, то слово - абсолютно любое.
Не катит.

walder

Как вцикле добавлять в энное место строки символ, ведь при добавлении строка увеличивается в размере, а ее длина используется в условии цикла?

evgen5555

Ну или после знака равенства количество слоф до следующего знака равенства минус 1 выделяеш в кавычки.

Dasar

иди с конца

Tasha2201

плохо

evgen5555

Чем же?

stm7884696

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

avinir60

Ты хочешь, чтобы тебе скрипт заменил
 <td align="right valign=middle" bgcolor="red" class=ttt>  
на
 <td align="right" valign="middle" bgcolor="red" class="ttt">  
Можешь объяснить зачем? Думаю, никакой браузер не пытается такое делать. То есть данный код для браузера аналогичен такому:
 <td bgcolor="red" class="ttt"> 
и это правильно.

walder

Нет, меня интересует не то, как это будет правильно для браузера, а как это будет правильно для дальнейшего распарсивания полученного хтмл-а.

evgen5555

Типа, для массового XSS+DoS эксплойтинга как раз такие парсеры и требуются. Но вот почему на PHP-хз

avinir60

Вот правильный результат распарсивания данного HTML:
<td bgcolor="red" class="ttt">

artimon

А не проще взять http://pixel-apes.com/safehtml или http://tidy.sourceforge.net/
Оставить комментарий
Имя или ник:
Комментарий: