2017-08-01 108 views
1

我想找到最好的方法来从字符串中去除所有的html标签,以保持纯文本。现在最简单的方法是strip_tags,但它不是最佳的,因为它不能很好地处理破损的标签等。我认为我需要的是一个DOM解析器。但我不知道这件事情如何工作。PHP删除所有的html标签,并保持与DOM解析器纯文本

,比如我有一个简单的字符串:

<p> 
     <strong>​ 
      Some plain text 
     </strong> 
    </p> 

我想去除所有与DOM解析器的标签,并保持纯文本:

Some plain text 

我怎样才能做到这一点?我试图用removeChild之,但它消除一切甚至文本:

$dom = new DOMDocument(); 
$dom->loadHTML($translation->text); 

foreach ($dom->getElementsByTagName("*") as $tag) { 
    $tag->parentNode->removeChild($tag); 
}; 
+1

'$ dom-> textContent' ...您可能需要修剪该值,因为它保留了原始的元素间空白。 – CBroe

+0

使用php strip_tags功能http://php.net/manual/es/function.strip-tags.php – lucianov88

回答

0

请试试这个:

<?php 

$content = <<<EOM 
    <p> 
    <strong> 
     Some plain text 
    </strong> 
    </p> 
EOM; 


$dom = new DOMDocument(); 
$dom->loadHTML($content); 

echo trim($dom->textContent); 

,或者简单地使用strip_tags,你可以做到这一点。

<?php 

$content = <<<EOM 
    <p> 
    <strong> 
     Some plain text 
    </strong> 
    </p> 
EOM; 

echo trim(strip_tags($content)); 
0

使用此功能方便,快捷:

function fetch_string($content) { 
    $content = preg_replace('@<script[^>]*?>.*?</script>@si', '', $content); 
    $content = preg_replace('@<style[^>]*?>.*?</style>@si', '', $content); 
    $content = strip_tags($content); 
    $content = trim($content); 
    return $content; 
} 

用法:

$string = '<p><strong>​Some plain text</strong></p>'; 
$output = fetch_string($string); 
0

您可以使用HtmlPurifier这一点。试试:

echo yii\helpers\HtmlPurifier::process($html); 

欲了解更多信息,请查阅此link