Ändern Sie html-Attribut mit php
Ich habe einen html-string enthält genau ein element. Beispiel:
<a href="http://www.test.com" rel="nofollow external">test</a>
In php habe ich um zu testen, ob rel enthält externe und wenn ja, dann ändern href und speichern Sie die Zeichenfolge.
Habe ich mich für die DOM-Knoten und Objekte. Aber Sie scheinen zu viel zu sein für nur Ein element, so muss ich Durchlaufen, um html-Knoten, und ich bin nicht sicher, wie Sie Sie zu testen, ob rel vorhanden und enthält externe.
$html = new DOMDocument();
$html->loadHtml($txt);
$a = $html->getElementsByTagName('a');
$attr = $a->item(0)->attributes();
...
An dieser Stelle, ich werde NodeMapList zu sein scheint, dass overhead. Gibt es eine einfacher Möglichkeit für diese oder sollte ich es mit DOM?
- Beim Umgang mit DOM haben Sie zwei Möglichkeiten: 1) verwenden Sie das native DOM-parser 2) regulären Ausdruck Verwenden (das ist Aufwand)
- Zu gehen zu halten. Verwenden
DOMDocument()
für manipulation - Niemand sollte die raw-DOM-Methoden für die manipulation. Betrachten phpQuery oder QueryPath etc. reduzieren langweilig boilerplate.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tun Sie es mit DOM.
Hier ein Beispiel:
Hielt ich ändern mit DOM. Dies ist, was ich bekomme:
Ich wollte nicht laden, andere Bibliothek, für nur diesen einen string.
Der beste Weg ist, verwenden Sie einen HTML-parser/DOM, aber hier ist eine regex-Lösung:
Online-demo.
Könnte man mit einem regulären Ausdruck wie
if it matches /\s+rel\s*=\s*".*external.*"/
dann tun Sie ein regExp-ersetzen wie
/(<a.*href\s*=\s*")([^"]\)("[^>]*>)/\1[your new href here]\3/
Aber mit einer Bibliothek, die das tun, diese Art von Sachen, die für Sie viel einfacher ist (wie jquery für javascript)