2017-08-01 57 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

相關問題