Streifen HTML-tags und Ihre Inhalte
Bin ich mit DOM parse-string. Ich brauche die Funktion, dass die Streifen die span-tags und deren Inhalt. Zum Beispiel, wenn ich habe:
This is some text that contains photo.
<span class='title'> photobyile</span>
Ich würde gerne die Funktion zurück
This is some text that contains photo.
Dies ist, was ich versucht habe:
$dom = new domDocument;
$dom->loadHTML($string);
$dom->preserveWhiteSpace = false;
$spans = $dom->getElementsByTagName('span');
foreach($spans as $span)
{
$naslov = $span->nodeValue;
echo $naslov;
$string = preg_replace("/$naslov/", " ", $string);
}
Ich bin mir bewusst, dass $span->nodeValue
liefert den Wert der span-tag und nicht den ganzen tag, aber ich weiß nicht, wie man den ganzen tag, gemeinsam mit der Klasse name.
Dank,
Ile
- Wenn Sie nicht brauchen, um verwenden Sie DOM, werfen Sie einen Blick auf Kommentare in strip_tags Handbuch.
- Man kann nicht sagen, die Funktion strip_tags die tags zu entfernen, nur die tags sollte es nicht entfernen.
- Richtig, das ist, warum ich verwies auf die Kommentare, wo Methoden für die stripping-tags gefunden werden können.
- Wenn nicht DOM als würde ich reguläre Ausdrücke verwenden. Das ist nicht das, was ich wirklich will 🙂
- +1 bonus-Punkt für nicht Parsen von HTML mit regex
- keine Ahnung, wie es zu konvertieren zu einem string statt hallte es, so kann ich es verändern, weiter?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, entfernen die Spannweiten direkt aus dem DOM-Baum.
loadHTML
fürloadHTMLfile
, und'span'
zu'link'
) alle meine<link>
- tags verschwinden, aber Ihr Inhalt bleibt (d.h.<link>http://www.something.com</link>
wirdhttp://www.something.com
)<link>
ist nicht ein "paired" - element, so dass der parser nicht erwarten, dass es alles enthalten. Versuchen Sie Ihr HTML, um einige der anderen tag, z.B.<a>
die verwendet werden sollten, für die links sowieso.<link>...</link>
, während ein anderer vielleicht<link href="..." />
. Es ist frustrierend, um es gelinde zu sagen.<link>
tags selbst schließen, damit das weglassen der Schwanz Ende. Ich habe stattdessen extrahiert der Teil, der mich interessiert, und dann brute-force-Analyse auf die kleine Scheibe. Es ist sicher und funktioniert jetzt.@ile - ich habe das problem - es ist, weil der index der foreach-iterator glücklich hält Inkrementieren, während der Aufruf von removeChild() auf dem DOM scheint auch zum entfernen der Knoten aus dem DomNodeList ($überspannt). So wird für jeden span, die Sie entfernen, die nodelist schrumpft ein element und erhält dann die foreach-Zähler um eins erhöht. Ergebnis: es überspringt span.
Ich bin sicher, es gibt eine elegantere Möglichkeit, aber das ist, wie ich es Tat, zog ich die Verweise aus dem DomNodeList, um einen zweiten array, wo Sie nicht entfernt werden, indem Sie die removeChild () - operation.