Удалить таблицу и ее содержимое из HTML-кода в PHP
У меня есть HTML-код, как показано ниже. Я хочу удалить всю таблицу и ее содержимое из нее с помощью php. Я могу удалить теги таблицы с помощью PHP strip_tags
но я не уверен насчет удаления содержимого таблицы. Любая помощь будет оценена.
<div>
<p> This is test paragraph</p>
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
</table>
</div>
Желаемый вывод
<div>
<p> This is test paragraph</p>
</div>
Спасибо @medigeek и всем за ваши ответы, я сделал несколько изменений в коде, чтобы он работал со встроенными стилями. Решение:
$html = '<div>
<p> This is test paragraph</p>
<table style="width:100%"> // Note: Inline Styles
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
</table>
</div>';
$regex = '/<table[^>]*>.*?<\/table>/s'; // Regular expression pattern
//This Regex pattern even works with tags that contains inline styles
$replace = '';
$result = preg_replace($regex, $replace, $html);
echo($result);
4 ответа
<?php
$teststring = '<div>
<p> This is test paragraph</p>
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
</table>
</div>';
$regexpattern = '/<table>.*?<\/table>/s'; // Matching regular expression pattern
$replacement = ''; // Substitute the matched pattern with an empty string
$res = preg_replace($regexpattern, $replacement, $teststring);
echo($res);
?>
Соответствие шаблону регулярных выражений
/
= начать регулярное выражение
<table>
= начать соответствие, когда вы видите этот текст
.*
= сопоставить что-либо (любые символы или пустое) между
?
= но не будьте жадными (как в случае совпадения только символов между установленными пределами)
<\/table>
= прекратить соответствие, когда вы видите этот текст
/
= конец шаблона регулярного выражения
s
= модификатор, продолжайте сопоставлять, даже если вы наткнетесь на символы новой строки
Регулярные выражения эффективны в сопоставлении, казалось бы, сложных текстовых строк на разных языках программирования. Вы можете найти больше информации здесь:
Попробуй это:
$content = <<<DATA
<div>
<p> This is test paragraph</p>
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
</table>
</div>
DATA;
$doc = new DOMDocument();
$doc->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$tables = $doc->getElementsByTagName('table');
while ($tables->length)
{
$tables[0]->parentNode->removeChild($tables[0]);
}
echo $doc->saveHTML();
Выход:
<div> <p> This is test paragraph</p> </div>
Вы можете сделать это с помощью preg_replace:
$your_html = '<table......';
$new_html = preg_replace("/(<table>).*?(<\/table>)/s", "", $your_html);
echo $new_html;
/*
OUTPUT:
<div>
<p> This is test paragraph</p>
</div>
*/
С Уважением,
Если вы хотите сделать это после того, как страница уже загружена (загрузка страницы и определенное событие вызывает удаление), это не может быть сделано с помощью php. Нечто подобное должно быть сделано с использованием JavaScript. Если вы хотите, чтобы он был удален во время загрузки страницы, вы должны будете установить вывод в php.
<div>
<p> This is test paragraph</p>
<?php
if(*CASE FOR LOADING*){
echo "
<table>
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>
<tr>
<td>Jill</td>
<td>Smith</td>
<td>50</td>
</tr>
</table>
";
}
?>
</div>
Выполнение этого будет отображать таблицу только тогда, когда причина указана через PHP.