Fjern HTML-tag fra string
Jeg har forsøgt at lave en funktion i PHP, som kan fjerne den første forekomst af et HTML-tag fra en string samt dets korrekte end-tag'et i forhold til DOM træet.Lad os f.eks. tage dette eksempel:
[code]<p>
<div>
<p>test</p>
</div>
</p>
<div>test</div>[/code]
Det skal efter det er kørt igennem funktionen, med fjernelse af første p-tag, blive til:
[code] <div>
<p>test</p>
</div>
<div>test</div>[/code]
Bemærk, at den ikke koncentrerer sig om indent.
Her er den funktion jeg har lavet:
[code]function remove_first_tag($var, $tag) {
$tagStart = '<'.$tag.'>';
$tagEnd = '</'.$tag.'>';
$pos = strpos($var,$tagStart);
if(!($pos === FALSE)) {
$posStartTag = $pos;
$level = 0;
for ($n=0;!isset($posEndTag) && $n-strlen($tagEnd)<strlen($var);$n++) {
$tmp_var = substr($var, $n);
if (substr($tmp_var, 0, strlen($tagStart))==$tagStart)
$level++;
if (substr($tmp_var, 0, strlen($tagEnd))==$tagEnd) {
$level--;
if ($level==0) {
$posEndTag=$n;
}
}
}
}
//removing start tag
if (isset($posStartTag))
$var = substr($var, 0, $posStartTag ).substr($var, $posStartTag+strlen($tagStart));
//removing end tag
if (isset($posEndTag))
$var = substr($var, 0, $posEndTag-strlen($tagStart)).substr($var, $posEndTag-strlen($tagStart)+strlen($tagEnd));
return $var;
}[/code]
Funktionen kan køres på denne måde:
[code]$var = remove_first_tag($string,'p');[/code]
Mit spørgsmål går blot på, om der findes en bedre måde at løse denne problemstilling på?
