Удалить таблицу и ее содержимое из 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.

Другие вопросы по тегам