使用php删除特定的html标签

时间:2011-09-30 12:37:53

标签: php html

因为我不想使用php的stip_tags函数而不想将<script> and </script>替换为空字符串,所以输出应该是alert(1)。

  

输入: -   <script>alert(1)</script>

     

输出: - 警告(1)

如何实现它。

6 个答案:

答案 0 :(得分:3)

使用简单的替换:

$string = str_replace(array("<script>","</script>"), "");

或RegEx:

$string = preg_replace("/<script.*?>(.*)?<\/script>/im","$1",$string); 

答案 1 :(得分:1)

echo strip_tags($text, '<p><strong><a>');

在第二个参数中说明你不想删除的那些

答案 2 :(得分:1)

我想你想要预先攻击XSS攻击,你不应该仅仅担心script标签,有人可能会像这样利用它:<a href="http://anywhere.com" onClick="alert(1);">test</a>(这是一个< em>非常基本方式)。

如果您只想要过滤没有属性的script标记:

str_replace(array('<script>', '</script>'), array('', ''), $str);

你应该使用正则表达式改进这一点;使用preg_match'es和preg_replaces(或仅preg_replaces),您可以匹配和/或替换脚本标记及其属性。甚至可以对XSS提供更多保护。

编辑:甚至像/<script>(.+)<\/script>/这样的正则表达式然后将括号之间的内容存储到变量中然后打印出来。

答案 3 :(得分:0)

您始终可以将strip_tags()与包含允许标记的第二个参数一起使用。

另外,使用......

preg_replace('/<script>(.*)</script>/i', '$1', $input);

注意,未经测试。

答案 4 :(得分:0)

试试这个同志..

$strn = "<script>alert(1)</script>";
$ptrn = "=^<script>(.*)</script>$=i";

echo preg_match( $ptrn, $strn, $mtchs ); // 0 means fail to matche and 1 means matches was found!
var_dump( $mtchs );

结果

1array(2) { 
    [0]=> string(25) "" 
    [1]=> string(8) "alert(1)" 
} 

答案 5 :(得分:0)

简单方法是使用 StripTags

转到StripTags github并通过composer下载或安装。 这个类有一个名为only的方法,可以为你做这个!

use Mimrahe\StripTags\Stripper;
$stripper = new Stripper();
$stripper->text('<a href="#">link</a><p>some paragraph</a>');
$stripper->only(['p']);
echo $stripper->strip(); // prints '<a href="#">link</a>some paragraph'