php strip_tags删除所有内容

时间:2015-10-23 07:39:40

标签: php strip-tags

我在用户输入上使用strip标签来删除所有可能的标签,但strip_tags php函数也删除了'<'即使没有在标签中使用。

例如,某些用户可能会使用表情符号:>。<或< 3

或甚至可以在算法等时使用。

是否有任何解决方案允许'<'在strip标签上?

4 个答案:

答案 0 :(得分:2)

在这种情况下出现问题

$foo = "text >.<text"

试试这个表达式(preg_replace with ims falgs):

<\s*\/?[a-z0-9]+(\s*[a-z\-0-9]+)*(\s*[a-z\-0-9]+\="[^"]*")*\s*\/?>

@edit: 例如:

<?php 

$test = "text text text >.<asd text <div style=\"font-size:12px;\">text >.<in div</div> asd asd <b>bolded</b> <script> alert('this is javascriptalert'); </script>";

$stripped =  strip_tags($test);
$replaced = preg_replace('/<\s*\/?[a-z0-9]+(\s*[a-z\-0-9]+)*(\s*[a-z\-0-9]+\="[^"]*")*\s*\/?>/ims','',$test);
var_dump($stripped,$replaced);

答案 1 :(得分:0)

您可以使用正则表达式:

$result = preg_replace("/\<\/?[A-Za-z\-\_]+\>/", "", YOUR_DATA);

答案 2 :(得分:0)

HTML解析器使用&lt;表示一个元素的开头,所以通常你更安全而不使用它。如果您希望副本中显示小于号,请改为使用HTML名称或代号:&lt;&#60;

答案 3 :(得分:0)

不,strip_tags将以这种方式工作。开括号和笑脸部分之间没有区别,因此您可以在strip_tags:

之前添加例外
input.replace("<3", "& lt;3");
input = strip_tags(input);