2011-09-30 37 views
1

因为我不想使用php的stip_tags功能而不是我想将<script> and </script>替换为空字符串,所以输出应该是alert(1)。使用php删除特定的html标签

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

输出: - 警报(1)

如何实现它。

回答

0

您总是可以使用strip_tags(),第二个参数包含允许的标签。

Alternativly,使用...

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

注意,未经测试。

+0

我只是想取代

2

要么使用一个简单的替换:

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

或正则表达式:

$string = preg_replace("/<script.*?>(.*)?<\/script>/im","$1",$string); 
2
echo strip_tags($text, '<p><strong><a>'); 

就说明你不希望在第二个PARAM

+0

不解决问题。将删除标签内的节点。该示例显示剥离标签,但不显示内容。 – Samvel

+0

-1根本没有解决问题。首先,OP说'我不想使用stip_tags“。其次,如果这是剥离整个HTML文件的标签呢?期望所有可能的html标签存在的全面清单是完全不合理的。 – Birrel

1

我猜你删除的那些想要捍卫XSS攻击,你不应该仅仅为担心script标签,有人可能会这样利用它:<a href="http://anywhere.com" onClick="alert(1);">test</a>(这是一个非常尽管)。

如果你只想要script标签,没有属性,要过滤:

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

你应该使用正则表达式改善这一点;使用preg_match'es和preg_replaces(或只有preg_replaces),您可以匹配和/或替换脚本标记及其属性。甚至有更多的保护措施抵制XSS。

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

+0

不是真的这样工作!使用正则表达式! – B4NZ41

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)" 
} 
0

简单的方法是使用StripTags

转到StripTags github并通过作曲家下载或安装。 这个类有一个方法叫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'