我需要一个干净简单的脚本,可以从字符串中的所有html标签中查找和删除所有事件属性。 “on ...”属性是 - onclick,onkeyup等。
编辑:以下是他们在Kohana中的表现:
$string = preg_replace('#(<[^>]+?[\x00-\x20"\'])(?:on|xmlns)[^>]*+>#iu', '$1>', $string);
编辑:以下是他们在CodeIgniter中的表现:
$string = preg_replace("#<([^><]+?)([^a-z_\-]on\w*|xmlns)(\s*=\s*[^><]*)([><]*)#i", "<\\1\\4", $string);
答案 0 :(得分:2)
该功能需要4个参数。
- $味精。要从中删除属性的文本。
- $标签。要从(例如)p中删除属性的标记。
- $ ATTR。一个数组,其中包含要删除的属性的名称(其余部分保持不变)。如果数组为空,则该函数将删除所有属性。
- $后缀。附加到标记的可选文本。例如,它可能是一个新属性。
醇>
从作者发布代码的Stripping Tag Attributes from HTML code开始,我从答案中省略了它,因为它很长并且不想声明代码的所有权。
希望这就是你要找的东西。
答案 1 :(得分:1)
你可以在这一行上做点什么:
<?php
$html = '<p class="foo" onclick="bar()">
Lorem ipsum dolor sit amet, consectetur <em>adipisicing elit</em>,
sed do eiusmod tempor incididunt ut labore
<a href="http://www.google.es" onmouseover="mover()" onmouseout="mout()" title="Google">et dolore magna aliqua</a>.
t enim ad minim veniam.</p>
';
$doc = new DOMDocument;
$doc->loadHTML($html);
echo "Before:\n" . $doc->saveHTML() . "\n";
foreach($doc->getElementsByTagName('*') as $node){
$remove = array();
foreach($node->attributes as $attributeName => $attribute){
if( substr($attributeName, 0, 2)=='on' ){
$remove[] = $attributeName;
}
}
foreach($remove as $i){
$node->removeAttribute($i);
}
}
echo "After:\n" . $doc->saveHTML() . "\n";
?>
这只是一个想法。它需要一些调整,因为它添加了标签来转换完整文档中的HTML片段,但您可以将其用作起点。