我正在尝试找到从字符串中删除所有html标记以保留纯文本的最佳方法。现在最简单的方法是strip_tags
,但它不是最优的,因为它不能很好地处理破碎的标签等。我认为我需要的是一个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);
};
答案 0 :(得分: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));
答案 1 :(得分: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);
答案 2 :(得分:0)