想删除html标签中的任何属性,我认为这可以使用正则表达式实现,但我不擅长使用正则表达式。
尝试使用str_replace,但这不是正确的方法。我搜索了类似的问题,但找不到任何问题。
示例:
在变量中得到这样的html标签:
$str = '
<p class="class_style" style="font-size: medium; line-height: normal; letter-spacing: normal;">content</p>
<span class="another_class_style" style="font-size: medium; line-height: normal; letter-spacing: normal;">content</span>
<ul class="another_class_style" style="background:#006;"></ul>
<li class="another_class_style" style=" list-style:circle; color:#930;">content</li>';
调用某些preg_match()
$new_str = preg_match('', $str)
预期输出:
$new_str = '
<p>content</p>
<span>content</span>
<ul></ul>
<li>content</li>';
请注意,我不打算剥离html标签,而只是需要删除标签中的任何标签元素。
php strip_tags() isn't an option
将不胜感激地获得帮助。
答案 0 :(得分:1)
虽然正则表达式可以完成任务,但通常鼓励使用DOM函数进行过滤或其他HTML操作。这是一个可重用的类,它使用DOM方法删除不需要的属性。您只需设置所需的HTML标记和属性,并过滤掉不需要的HTML部分。
class allow_some_html_tags {
var $doc = null;
var $xpath = null;
var $allowed_tags = "";
var $allowed_properties = array();
function loadHTML( $html ) {
$this->doc = new DOMDocument();
$html = strip_tags( $html, $this->allowed_tags );
@$this->doc->loadHTML( $html );
$this->xpath = new DOMXPath( $this->doc );
}
function setAllowed( $tags = array(), $properties = array() ) {
foreach( $tags as $allow ) $this->allowed_tags .= "<{$allow}>";
foreach( $properties as $allow ) $this->allowed_properties[$allow] = 1;
}
function getAttributes( $tag ) {
$r = array();
for( $i = 0; $i < $tag->attributes->length; $i++ )
$r[] = $tag->attributes->item($i)->name;
return( $r );
}
function getCleanHTML() {
$tags = $this->xpath->query("//*");
foreach( $tags as $tag ) {
$a = $this->getAttributes( $tag );
foreach( $a as $attribute ) {
if( !isset( $this->allowed_properties[$attribute] ) )
$tag->removeAttribute( $attribute );
}
}
return( strip_tags( $this->doc->saveHTML(), $this->allowed_tags ) );
}
}
该类使用strip_tags
两次 - 一次快速消除不需要的标记,然后从其余标记中删除属性后,它消除了DOM函数(doctype,html,body)插入的其他标记。要使用,只需执行此操作:
$comments = new allow_some_html_tags();
$comments->setAllowed( array( "p", "span", "ul", "li" ), array("tabindex") );
$comments->loadHTML( $str );
$clean = $comments->getCleanHTML();
setAllowed函数接受两个数组 - 一组允许的标记和一组允许的属性(如果你以后决定要保留一些。)我已经改变你的输入字符串以包含一个添加的tabindex =“1”属性在某处说明过滤。 $ clean的输出是:
<p>content</p>
<span>content</span>
<ul tabindex="3"></ul><li>content</li>
答案 1 :(得分:0)
答案 2 :(得分:0)
$str = '
<p class="class_style" style="font-size: medium; line-height: normal; letter-spacing: normal;">content</p>
<span class="another_class_style" style="font-size: medium; line-height: normal; letter-spacing: normal;">content</span>
<ul class="another_class_style" style="background:#006;"></ul>
<li class="another_class_style" style=" list-style:circle; color:#930;">content</li>';
$clean = preg_replace('/ .*".*"/', '', $str);
echo $clean;
将返回:
<p>content</p>
<span>content</span>
<ul></ul>
<li>content</li>
但是请不要使用正则表达式来解析HTML,使用DOM解析器。