为什么PHP函数strip_tags()删除不是标记的数据?怎么避免这个?

时间:2013-05-23 10:44:22

标签: php

此代码:

$input = 'I love <3 PHP!';
echo strip_tags($input);

输出:

I love 

是否有PHP函数(或任何人的自定义函数)只删除标记(表示正确关闭的标记),而不是<之前的所有内容?

3 个答案:

答案 0 :(得分:1)

尝试htmlspecialchars,它仍会显示标签,但会转换为html实体

答案 1 :(得分:1)

  

为什么PHP函数strip_tags()会删除不是标记的数据?

它在安全方面犯了错误。

  

如何避免这种情况?

如果您希望输入文字,请使用htmlspecialchars 转义 <字符(以及其他一些字符),而不是将其删除。

答案 2 :(得分:1)

从PHP 5开始,Tidy扩展通常在大多数已编译的二进制文件中可用。它不是100%有效但在这种情况下可以帮助你。 Tidy尝试关闭字符串中所有未关闭的HTML标记。关闭它后,您可以忽略所需的标签。然后,您需要删除整齐放入的最终标记。

Tidy documentation

$str = tidy("I <3 PHP");

// second param ignores the closed tag <3>
$str = strip_tags($str, '<3>')

$str = str_replace('<3>', '<3', $str);

echo $str;