Kompletten Part in String ersetzen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Kompletten Part in String ersetzen

    Hallo zusammen,

    ich würde gerne in einem String ein kompletten Part entfernen.

    Dafür habe ich folgenden Code gefunden:

    PHP-Quellcode

    1. $str = preg_replace("/<a(.*)<\/a>/", "XXX", $beschreibung);

    Dies funktioniert bei einem einfachen Link auch super:

    PHP-Quellcode

    1. $beschreibung='Dies ist ein <a href="test.php">Test</a> Test';

    Ausgabe:
    Dies ist ein XXX Test

    Klappt also Einwandfrei. Jedoch nicht bei meinem folgenden Code:

    PHP-Quellcode

    1. $beschreibung='<span style="font-weight: bold;">Beschreibung:</span><br>Dies ist ein „Test“<br><br><a href="bilder/bild.jpg" class="galerie_zoom" data-fancybox-group="gallery" title="Bildname">
    2. <img src="bilder/bild.jpg" alt="Bildname" style="float:right; width:200px; margin-left:10px; margin-top:10px; margin-bottom:10px; -moz-border-radius:3px 3px 3px 3px; /* Firefox */-webkit-border-radius:3px 3px 3px 3px; /* Chrome, Safari */ -khtml-border-radius:3px 3px 3px 3px; /* Konqueror */ border-radius:3px 3px 3px 3px; /* CSS3 */ behavior:url(border-radius.htc); /* Internet Explorer */">
    3. </a> Dies ist ein Test<br><br><span style="font-weight: bold;">Beschreibung:</span>Dies ist ein Test<br><br>';

    Ich gebe zu, zwischen <a und </a> sind viele Attribute verbaut, jedoch dürfte die Funktionsfähigkeit darunter doch nicht leiden, oder? ;(

    Übrigens würde ich gerne noch eine Erweiterung haben, bei der nur die Links entfernen, welche auch noch ein Bild dazwischen haben. Geht das mit diesem Code? Also <a <img </a>

    Danke für eure Unterstützung!

    LG
    Tobbe
  • Hey bYemma,

    vielen Dank, dass mit den Zeilenbrüchen schien der Fehler zu sein! 8o

    Danke auch für den zweiten Code, doch was mache ich nun wenn ich mehrere Links habe und er nur die mit Bildern ersetzen soll?

    Hatte es gerade ausprobiert mit einem Text alla "Test Test <a href="">Linktext + Bild: <img src=""></a> Test Test <a href="">Einzelner Link</a> Test Test"

    Erhoffen würde ich nun folgende Ausgabe:
    Test Test Test Test Einzelner Link Test Test


    Leider kommt mit deinem Codeschnipsel:
    Test Test Test Test


    Er nimmt anscheinend das letzte </a> und nicht das nächste. Wo ist der Fehler?

    Danke für eure Hilfe!!! :thumbsup:
  • Natürlich, das hab ich bei Tags vergessen. Da müssen wir dem * mit dem ? sagen, dass nicht gierig sein soll, sondern die kürzest mögliche Fundstelle zurückgibt:

    PHP-Quellcode

    1. $str = preg_replace("/<a(.*?)<img(.*?)<\/a>/", "XXX", $beschreibung);

    Ich hab übrigens noch die Lösung gegen Zeilenumbrüche gefunden: Einfach den Modifier s verwenden:

    PHP-Quellcode

    1. $str = preg_replace("/<a(.*)<\/a>/s", "XXX", $beschreibung);

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von bYemma ()

  • Es hat sich nun ein kleines Problem gezeigt :)

    Folgender Code ist nun im EInsatz:

    Quellcode

    1. echo preg_replace("/<a(.*?)<img(.*?)<\/a>/", "&nbsp;", str_replace("\n", "", utf8_encode($beschreibung)));

    Ist der Text hinter $beschreibung so aufgebaut:

    Text Text Text <a href="">Linktext</a> Text Text Text <a href=""><img src=""></a> Test Test Test

    Wird jedoch ab dem ersten Link bis nach dem Bild alles entfernt:
    Text Text Text Test Test Test

    Das soll natürlich nicht, die reinen Textlinks sollen behalten werden und tatsächlich nur das Link Tag inkl. Bildtag soll entfernt werden. Wie kann man das realisieren?

    Kann mir da jemand helfen?