Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

preg_replace: Alles ausserhalb ersetzen?

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 05.12.2007, 16:37

Hallo. Ich habe eine einfache Ersetzung vorzunehmen, das geht auch gut:
$txt = preg_replace("Suchen/iU", "Ersetzen", $txt);

Nun möchte ich gerne alles ersetzt haben, bis auf alles, was in Textareas steht: Also alles, was innerhalb von <textarea> </textarea> steht, soll diesmal NICHT ersetzt werden.

Irgendwie habe ich überhaupt keinen Ansatzpunkt - habt Ihr ne Idee?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 05.12.2007, 17:45

Du hast einen String "abc <textarea> def </textarea> ghi". Diesen splittest du anhand von "<textarea>" und "</textarea>" mit explode(), schon kannst du auf das zwischen drin zugreifen. preg_replace ist hier nicht unbedingt der richtige Weg.

wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 05.12.2007, 21:20

Danke! Hm, nur wie explode ich das ganze denn anhand von <textarea> und </textarea>, um dann nur auf die Bereiche außerhalb zuzugreifen? Problem ist auch nicht, dass in dem Textarea ja noch styles usw. drin stehen können (also <textarea style="....").

Ich dachte halt, es gebe evtl. eine Lösung analog zu: https://www.php-faq.de/q/q-regexp-ersetzen.html Ich habs nur nicht hinbekommen...

Southmedia
PostRank 10
PostRank 10
Beiträge: 7322
Registriert: 20.07.2003, 19:56

Beitrag von Southmedia » 05.12.2007, 22:01

Okay, wenn das <textarea> nicht so klar abgegrenzt ist wird das ganze schon komplizierter. Vielleicht doch besser ein Regex der dann nach dem Schema aufgebaut ist:

(.*)<textarea(.*)>(.*)</textarea><(.*)

Nur um das so wirklich zum laufen zu kriegen bin ich darin nicht fit genug. Würde ich vermutlich auch ne Zeit lang brauchen...

Habe noch ne Idee: Erst explode anhand von "<textarea", dann alles bis nach dem nächsten ">" löschen und danach eben noch das explode mit "</textarea>". Um die Ecke gedacht, aber einfach.

Kylee
PostRank 2
PostRank 2
Beiträge: 63
Registriert: 18.12.2006, 14:18
Wohnort: Braunschweig

Beitrag von Kylee » 06.12.2007, 10:05

Code: Alles auswählen

$scan = "#&#40;.*&#41;&#40;<textarea>.+</textarea>&#41;&#40;.*&#41;#is";

  preg_match_all&#40;$scan, $deintext, $m, PREG_SET_ORDER&#41;;

    foreach&#40;$m as $mm&#41;
	 &#123;
$suchen = array&#40;"$mm&#91;1&#93;", "$mm&#91;3&#93;"&#41;;
$ersetzung = array&#40;"$vortextarea", "$nachtextarea"&#41;;
$deinneuertext = str_replace&#40;$suchen, $ersetzung, $deintext&#41;;

// wenn du es mit nichts ersetzen willst brauchst du nur $mm&#91;2&#93; ausgeben und ersparst dir den replace.
&#125;

LG Kylee

wuschba
PostRank 8
PostRank 8
Beiträge: 655
Registriert: 16.06.2006, 16:37

Beitrag von wuschba » 06.12.2007, 15:29

Danke!

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag