我有以下php函数应该根据给定的类名或id去除一块html标记。我得到这个功能http://www.katcode.com/php-html-parsing-extracting-and-removing-html-tag-of-specific-class-from-string/剥离基于类或id的整个HTML块用php
这个函数的工作原理应该是这样,但是当我们有嵌套标签时似乎有问题。在下面的例子中,我试图删除整个div类的'两'类。
此功能似乎有嵌套标签的问题。这不是正确地移除div区块。计算块的开始和结束时遇到问题。我该如何重写这个函数,而不管它包含多少个嵌套元素。我打开其他PHP的建议。我可以用jQuery轻松做到这一点,但我正在寻找一个php服务器端解决方案。
HTML看起来像这样
<div class="test">
<div>testing1</div>
<div class="two">
<div>testing3</div>
<div>testing3</div>
</div>
<div>testing3</div>
<div>testing4</div>
</div>
PHP
<?php
$x = '<div class="test"><div>testing1</div><div class="two"><div>testing3</div><div>testing3</div></div><div>testing3</div><div>testing4</div></div>';
function removeTag($str,$id,$start_tag,$end_tag){
while(($pos_srch = strpos($str,$id))!==false){
$beg = substr($str,0,$pos_srch);
$pos_start_tag = strrpos($beg,$start_tag);
$beg = substr($beg,0,$pos_start_tag);
$end = substr($str,$pos_srch);
$end_tag_len = strlen($end_tag);
$pos_end_tag = strpos($end,$end_tag);
$end = substr($end,$pos_end_tag+$end_tag_len);
$str = $beg.$end;
}
return $str;
}
echo removeTag($x,'two','<div','/div>');
?>
我的回答不够好,不能作为“答案”,但我会指出你的方向。我看到人们用DOM和Xpath完成这样的事情。 – TecBrat 2012-02-22 03:29:13
谢谢,但这并不能帮助我。 – Pinkie 2012-02-22 03:31:46
使用解析器是解析HTML的唯一正确方法...不是正则表达式,不是字符串函数。这就是为什么你有麻烦。就像@TecBrat所说的,你需要使用'DOM'。尝试使其与它一起工作,如果您遇到问题,请发布新的(或更新的)问题。 – rdlowrey 2012-02-22 03:41:52