170 похожих чатов

Доброго вечера, столкнулся с тем, что через DOMDocument removeChild не

прибивается <script>...</script> если в теле JS есть вывод HTML-кода, например:
.....append('<div class="t-btn_effects"></div>');

Убиваю рекурсивной функцией:
function cleanup($node, $tags)
{
if ($node->hasChildNodes()) {
$to_delete = [];
foreach ($node->childNodes as $child_node) {
if (in_array(strtolower($child_node->nodeName), $tags)) {
$to_delete[] = $child_node;
}
}
foreach ($to_delete as $child_node) {
$node->removeChild($child_node);

}
foreach ($node->childNodes as $child_node) {
cleanup($child_node, $tags);
}
}
}

cleanup($dom, [
'head',
'script',]);

Подскажите, может бы у кого-то опыт по чистке HTML с такой же особенностью? Что делать?

16 ответов

26 просмотров
Dimases- Автор вопроса

Никто не сталкивался? А то приходится через $html = preg_replace("/<script[^>]*?>.*?<\/script>/isu", " ", $html); прибивать, что тоже совсем не правильно...

может соберешь примерчик тестовый на https://3v4l.org/

Dimases- Автор вопроса

может соберешь примерчик тестовый на https://3v4l....

попробую... там html файл из файла тягается. если file_get_content позволит... ну сейчас, напишу, как закончу

Dimases
попробую... там html файл из файла тягается. если ...

если на простой разметке сработает, то оставь от него только этот скрипт и еще какой-нибудь тэг. $html = <<<HTML тут тэги убрать лишнее HTML; # инициализация DOMDocument # очистка

Dimases- Автор вопроса

если на простой разметке сработает, то оставь от н...

оставляет все, что в <script></script> прибивая при это тег

Dimases- Автор вопроса

если на простой разметке сработает, то оставь от н...

если удаляю: <div class=\"t-btn_effects\"></div> все обрабатывается нормально https://3v4l.org/cRNhX

Dimases
если удаляю: <div class=\"t-btn_effects\"></div> в...

этот документ с ошибками, ты их отключил. если оставить только этот скрипт в <body> то он и так удаляется (неважно что внутри append() будет).

Dimases- Автор вопроса

этот документ с ошибками, ты их отключил. если ост...

чем бы лечить ошибки? tidy не помогает =(

Dimases
чем бы лечить ошибки? tidy не помогает =(

а я хз🤤 ну может опции задай tidy более агрессивные

Dimases- Автор вопроса
Dimases
чем бы лечить ошибки? tidy не помогает =(

браузер же выдает корректную разметку, значить и tidy должен (в теории)

Dimases- Автор вопроса
Dimases
поиграюсь, сайты на тильде - зло

парсить чужеродную разметку - зло🤤

Dimases- Автор вопроса

парсить чужеродную разметку - зло🤤

а что делать? SEO-тулзы сами себя не напишут, сравнивать разные сайты надо

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта