从php中的html代码中删除表及其内容

时间:2018-01-24 17:51:42

标签: php html

我有一个像下面这样的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 个答案:

答案 0 :(得分:0)

您可以使用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>
*/

此致

答案 1 :(得分:0)

<?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 =修饰符,即使偶然发现新的行字符也要保持匹配

正则表达式在匹配不同编程语言中看似复杂的文本字符串方面非常强大。您可以在此处找到更多信息:

答案 2 :(得分:0)

如果您想在页面加载后(页面加载和某些事件触发删除)之后执行此操作,则无法使用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提供原因时显示表格。

答案 3 :(得分:0)

试试这个:

$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>