去除除 <Pre 内部以外的所有标签

Strip all tag except inside <Pre

提问人:pccamp 提问时间:7/15/2023 更新时间:7/15/2023 访问量:37

问:

我有一根绳子。

$string = '<p>someText</p><li>someText</li><pre><p>someText</p></pre>';
I

想要剥离除 pre 标签之外的所有标签。 例如,$string的输出是:

$string = 'someTextsomeText<pre><p>someText</p></pre>';

这是行不通的:

$string = strip_tags($string,<pre>);

php strip-tags

评论

2赞 Quentin 7/15/2023
pre 元素中不允许使用 p 元素,因此如果您剥离标签,则 HTML 将无效。
0赞 apokryfos 7/15/2023
strip_tags不会做你需要的。您需要找到另一种解决方案。这看起来如何取决于你,有很多方法可以解决这个问题(例如,只在子字符串之外运行,或者用占位符替换,然后替换它们,等等)。strip_tags<pre>...</pre><pre>...</pre>

答:

0赞 Anthony Bird 7/15/2023 #1

这是一个解决方案 - 示例字符串为:

$string = '<p>some Text First</p><li>some Text First</li><pre><p>someTextInside</p></pre><p>Some Text Last</p>';

制作图案以查找其中的预告和内容:

$pattern="/\<pre>(.*?)<\/pre>/";

使用 preg_match 查找模式:

$preSection = preg_match($pattern, $string, $matches);

在 BEFORE pre 和 AFTER pre 之前拆分为部分:

$parts = explode($matches[0], $string);

从 pre 之前和之后的内容中剥离标签,并组合在一起以形成最终字符串:

$final = strip_tags($parts[0]) . $matches[0] . strip_tags($parts[1]);

echo $final;

// RESULT: some Text Firstsome Text First<pre><p>someTextInside</p></pre>Some Text Last

评论

0赞 Anthony Bird 7/16/2023
如果有帮助,请接受回答。