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 ответов

25 просмотров
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-тулзы сами себя не напишут, сравнивать разные сайты надо

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

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

Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
лучше скажите, причём тут паскаль?
Alexey Kulakov
22
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
#include <stdio.h> #include <stdlib.h> #include <time.h> int** generate_table(int size_matrix) { int** matrix = (int**)malloc(size_matrix * sizeof(int*)); for (int i ...
Чувак
1
@PerlBanjoBot use v5.38; sub split_on_cond($arr, $cond) { ($a, $b) = ([], []); push @{ $cond->($_) ? $a : $b }, $_ for @$arr; ($a, $b) } use Data::Dumper; warn Dumpe...
Sergei Zhmylove
10
Всем привет! как узнать, что текст в TSkLabel был выведен сокращенным ? Есть функция для TLabel которая позволяет определить , что текст выведен сокращенным function TFrmMai...
DELPHI SOLUTIONS
6
Вот объясните, как это работает: Вот есть допустим unix-подобная система, и программа запускает допустим printf или fork, как это передается ядру, и как оно обрабатывать начин...
Егор
14
Дебил? Я ищу друга
Bitard 228
27
У меня это всегда вопрос вызывало.. Нафига писать код так, чтобы потом ошибки вылавливать?
Nik
44
Карта сайта