从字符串中删除所有HTML标签的最佳方法是什么?

4

使用PHP,给定一个字符串,例如:this is a <strong>string</strong>;我需要一个函数来剥离所有的HTML标签,以便输出为:this is a string。有什么好的想法吗?谢谢。

4个回答

11

PHP有一个内置函数可以完全满足你的需求:strip_tags

$text = '<b>Hello</b> World';
print strip_tags($text); // outputs Hello World
如果您想要处理损坏的HTML,您需要将其加载到DOM解析器中,然后提取文本。

1
+1 但要注意,strip_tags 可能无法去除无效的 HTML 标签,因此根据应用程序的不同,您可能需要进行一些额外的处理。 - Mike Dinescu
strip_tags()对于XSS保护来说非常糟糕,因为它只能防御一些XSS攻击向量。请使用htmlspecialchars($var,ENT_QUOTES)。 - rook

5
我可以帮您进行翻译。这段内容涉及编程,建议使用strip_tags函数来实现相应的功能。以下是引用文档中的示例:
<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

会给你:
Test paragraph. Other text

编辑:但请注意strip_tags不会验证您提供的内容。这意味着以下代码:
$text = "this is <10 a test";
var_dump(strip_tags($text));

会得到你:
string 'this is ' (length=8)

(一切在看起来像起始标记之后的内容都会被删除。)

1

strip_tags 是您需要的函数。您可以像这样使用它:

$text = '<strong>Strong</strong>';
$text = strip_tags($text);
// Now $text = 'Strong'

0

我发现这比仅使用strip_tags()更有效,因为strip_tags()无法删除javascript或css:

$search = array(
    "'<head[^>]*?>.*?</head>'si",
    "'<script[^>]*?>.*?</script>'si",
    "'<style[^>]*?>.*?</style>'si",
);
$replace = array("","",""); 
$text = strip_tags(preg_replace($search, $replace, $html));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接