2010-12-10 10 views
2

Ich habe eine Sammlung von Text, den ich versuche, mit PHP dynamisch zu verarbeiten (die Daten stammen aus einer XML-Datei), aber ich möchte den Link und den Text strippen ist verbunden.Gesamten HTML-Link (einschließlich Text) mit PHP löschen

PHPs strip_tags entfernt die <a etc...> und </a>, aber nicht den Text zwischen.

Ich bin derzeit versucht, die Regex preg_replace('#(<a.*?>).*?(</a>)#', '', $content);

Eine andere Sache zu verwenden, zu beachten ist, die Verbindungen Stile haben, Klassen, href und Titel.

Kennt jemand die Lösung?

+0

* (bezogen) * [beste Methoden zu analysieren, HTML] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon

+1

Als Referenz haben Sie die Anker-Tags gruppiert, aber nicht den Inhalt, wo der Profi ist Lügen liegt. preg_replace ersetzt das gruppierte Element (in Klammern eingeschlossen). Sie können jedoch Folgendes versuchen: '# (] *?>. *?) # i' (ich flag für einen case insensitive vergleichen) –

+1

kurz getestet kürzere regex-Version, nur zum Spaß :)' preg_replace ('/ <(?:a|\/)[^> ] *>/',' ', $ data); ' –

Antwort

0

ich die Lösung verwendet (s) als Kommentare geschrieben, sie schienen am besten zu funktionieren und waren genau das, was ich gesucht habe!

"Als Referenz haben Sie die Anker-Tags gruppiert, aber nicht den Inhalt, wo das Problem liegt. Preg_replace ersetzt das gruppierte Element (die in Klammern enthalten). Sie können jedoch Folgendes versuchen: #(<a[^>]*?>.*?</a>)#i (i Flag für einen Fall unempfindlich vergleichen)“- Brad Christie

"kurz kürzer regex Version, nur so zum Spaß getestet :) preg_replace ('/<(?:a|\/)[^>]*>/', '', $data);" - Cyber-Guard Entwurf gestern

0

Da das ein -Element nicht das Online ist, das Ihre Seite brechen kann, sollten Sie besser einen Whitelist-Ansatz verwenden, wie strip_tags().

+1

Sorry wirklich keine Ahnung was du meinst ...? –

+0

Ich weiß nicht genau, was Sie wollen, aber normalerweise sollten Sie angeben, welche Tags erlaubt sind und nicht, welche nicht erlaubt sind. Wenn Sie die Tags aus Sicherheitsgründen entfernen möchten, denken Sie an _iframe_, _img_ oder _link_. – KingCrunch

-1

Mit regex, aber nicht gründlich getestet

echo preg_replace('#(<a.*?>)(.*?)(<\/a>)#','$2', $str); 

Auch die limit Argument auf -1 gesetzt, wird es keine Grenze gesetzt.

2

können Sie DOMDocument verwenden, zum Beispiel (nicht getestet!):

Oder Simple HTML DOM Parser mit:

$html = file_get_html('http://www.example.com/'); 
foreach($html->find('a') as $element) { 
    $element->outertext = ''; 
} 
$html->save('output.html'); 
+0

Kann jemand bitte die Down-Vote erklären? – karim79

+1

Diese Antwort scheint für solch eine einfache Aufgabe übermäßig kompliziert zu sein ... –

+0

@ Cyber-Guard Design - Ich denke nicht, dass es übermäßig kompliziert ist. Und es wird sicherlich zuverlässiger sein als ein regulärer Ausdruck. – karim79

3

try this:

$content=preg_replace('/<a[^>]*>(.*)<\/a>/iU','',$content); 
+0

Super!Jetzt sehe ich den Grund, reguläre Ausdrücke gut zu lernen! Und wie entferne ich Tags, aber nicht diejenigen mit "

Verwandte Themen