tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
20
ZUGRIFFE
2356
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    matzebrock matzebrock ist offline Mitglied
    Registriert seit
    Nov 2006
    Beiträge
    13
    Hallo. Ich brauche mal eure Hilfe.

    Angenommen ich habe nen String in dem nun eine ganze Reihe von HTML-Tags stehen.
    z.B.


    PHP-Code:
    $html '<a href="tutorials.de">Link</a><br><br />
    <img src="abc.gif" /><p>Ein Absatz</p><hr><br /><input type="text">'

    In diesem Beispiel ist nen simpler HTML Code, der jedoch nicht XHTML Konform ist.
    Meine Frage nun:
    Wie müsste der Regex-Ausdruck heißen, damit nur die Tags (<hr>; <br>; <img>; <input> - also nur alleinstehende tags), die offen sind, geschlossen werden? Also dass aus dem oberen Beispiel


    PHP-Code:
    $html '<a href="tutorials.de">Link</a><br /><br />
    <img src="abc.gif" /><p>Ein Absatz</p><hr /><br /><input type="text" />'

    Mit dem Regex Ausdruck müsste lediglich nach bestimmten Tags gesucht werden - den Tag an sich auslesen - nachgucken ob an vorletzter Stelle ein "/" steht - wenn nicht an dieser stelle einfügen.

    Bitte versucht mir zu helfen. Danke!

    Gruß
    Matze
     

  2. #2
    Avatar von BabyMitSchnully
    BabyMitSchnully BabyMitSchnully ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Ort
    Rheine
    Beiträge
    139
    Geht es nicht so?

    PHP-Code:
    $html '<a href="tutorials.de">Link</a><br><br /> 
    <img src="abc.gif" /><p>Ein Absatz</p><hr><br /><input type="text">'
    ;  

    $suchstring "<br>";
    $xHtmlString "<br />";


    $html str_replace ($suchstring,$xHtmlString,$html); 
     
    Sag niemals nie

  3. #3
    matzebrock matzebrock ist offline Mitglied
    Registriert seit
    Nov 2006
    Beiträge
    13
    Hallo danke für deine Antwort.
    In diesem Fall würde es so gehen (also bei <br>).
    Aber bei Input - bei dem der Tag-Content immer anders kann ich nicht str_replace nehmen.

    Ich bin gerade so weit:

    PHP-Code:
    $shorttags = array('img''input''hr''br');
    unset(
    $ausgabe);
    foreach ( 
    $shorttags as $tag ) {
        
    $pattern "/<".$tag.".*?>/i";
        
    preg_match_all($pattern$html$ausgabe[$tag]);

    Das liefert mir zumindest alle Tags, die es zu ersetzen gilt - leider auch die, bei denen das Slash (z.B. <br />) schon vorhanden ist. Die müsste ich jetzt ausschließen können.

    Dann der Replace...
     

  4. #4
    Avatar von BabyMitSchnully
    BabyMitSchnully BabyMitSchnully ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Ort
    Rheine
    Beiträge
    139
    Wäre es denn so schlimm, wenn du auch diese noch mal ersetzt? Also aus einem <br /> einfach noch mal ein <br /> machst? Ist ein wenig unsauber programmiert, erspart dir aber eine Menge Zeit

    Gruß
    Chris
     
    Sag niemals nie

  5. #5
    matzebrock matzebrock ist offline Mitglied
    Registriert seit
    Nov 2006
    Beiträge
    13
    Folgender Code funktioniert zwar, aber ziemlich langsam...

    PHP-Code:
    $shorttags = array('img''input''hr''br');
            
    foreach ( 
    $shorttags as $tag ) {
        unset(
    $ausgabe);
        
    $pattern "/<".$tag.".*?>/i";
        
    preg_match_all($pattern$html$ausgabe);
                    
        foreach ( 
    $ausgabe[0] as $replace ) {
            if ( 
    strpos($replace'/>') == ) {
                
    $html str_replace($replacesubstr($replace0strlen($replace)-1) . ' />'$html);
                
    $html str_replace('</'.$tag.'>'''$html);
            }
        }

    Deshalb würde ich mich über eine preg_replace Lösung sehr sehr freuen
     

  6. #6
    Avatar von BabyMitSchnully
    BabyMitSchnully BabyMitSchnully ist offline Mitglied Gold
    Registriert seit
    Sep 2003
    Ort
    Rheine
    Beiträge
    139
    jap. Ich kann dir auch sagen, was den ganzen Quatsch langsam macht. Das ist nicht das Replace. Das sind deine beiden ineinander verschachtelten Schleifen. Die machen das System langsam. Versuch dafür eine andere Lösung zu finden.
     
    Sag niemals nie

  7. #7
    matzebrock matzebrock ist offline Mitglied
    Registriert seit
    Nov 2006
    Beiträge
    13
    Das einzige was mir in den Sinn kommt ist die Funktion array_walk - ist aber ähnlich langsam.
     

  8. #8
    soyo soyo ist offline Mitglied Brillant
    Registriert seit
    Apr 2006
    Beiträge
    794
    Ich kenn mich jetzt mit xml nicht aus ... Muss jeder Tag geschlossen werden, oder nur <hr>; <br>; <img>; <input> ?
     

  9. #9
    matzebrock matzebrock ist offline Mitglied
    Registriert seit
    Nov 2006
    Beiträge
    13
    Hallo.

    In XML müssen alle Tags geschlossen werden. Dabei gibt es zwei Varianten:

    HTML-Code:
    <b>Fetter Text/b>
    und die Andere:

    HTML-Code:
    <br />
    Beide Tags gelten als geschlossen. In meinem Fall konzentriere ich mich auf die Tags im zweiten Beispiel (also br, hr, input, img).

    Gruß
     

  10. #10
    soyo soyo ist offline Mitglied Brillant
    Registriert seit
    Apr 2006
    Beiträge
    794
    Versuchs mal hiermit:

    PHP-Code:
    preg_replace('|<(.*[^/])>|sU','<$1 />',$html); 
    Hier wird jetzt jedes <Tag> durch <Tag /> ersetzt. Ich weiß jetzt nicht genau ob du das so wolltest, wenn nicht kann man das auch noch anpassen.
    Da ich auch nicht wirklich der RegEx-Profi bin, weiß ich auch nicht ob die Lösung so sauber ist, sie funktioniert jedenfalls, aber das hatt ja oft nix zu bedeuten.
    Geändert von soyo (03.11.06 um 13:31 Uhr)
     

  11. #11
    matzebrock matzebrock ist offline Mitglied
    Registriert seit
    Nov 2006
    Beiträge
    13
    Hey klasse. Das klappt soweit.jetzt müsste es möglich sein die 4 tags in einer abfrage reinzupacken. geht das?
    ich glaube das war irgendwie so:

    Vorsicht! Der Code funktioniert so nicht!
    PHP-Code:
    $html preg_replace('|<(input;br;hr;img)(.*[^/])>|sU','<(input;br;hr;img)$1 />',$html); 
    Weist du was ich meine?
     

  12. #12
    soyo soyo ist offline Mitglied Brillant
    Registriert seit
    Apr 2006
    Beiträge
    794
    Ich bastel schon die ganze Zeit, ich schaff es nicht das mit einen regulären Ausdruck zu beschreiben. Aber ich gebe nicht auf
     

  13. #13
    soyo soyo ist offline Mitglied Brillant
    Registriert seit
    Apr 2006
    Beiträge
    794
    Also ich hab jetzt einiges probiert, aber ich bekomm es nicht mit einen regulären Ausdruck hin. Mit 2 schon.
    Mit einen die hr- und br-Tags und mit einem anderen, die img und input-Tags.
    Bitte schau sich das ma jemand an, der wirklich Ahnung davon hatt

    achso hier der Scriptcode für img- und input-Tags:

    PHP-Code:
    preg_replace('?<(img|input)(.*[^/])>?sU','<$1$2 />',$html); 
    Geändert von soyo (03.11.06 um 19:12 Uhr)
     

  14. #14
    matzebrock matzebrock ist offline Mitglied
    Registriert seit
    Nov 2006
    Beiträge
    13
    Ich danke dir vielmals für deine Hilfe und freue mich, dass du so engagiert dabei bist. Ich brauche die Hilfe echt - und regex ist das letzte wovon ich nen blassen habe

    Also nach wie vor, danke!
     

  15. #15
    Avatar von Online-Skater
    Online-Skater Online-Skater ist offline Mitglied Brillant
    Registriert seit
    Sep 2004
    Ort
    Rostock
    Beiträge
    891
    Code :
    1
    
    preg_replace('?<(img|input|br|hr)(.*[^/])>?sU','<$1$2 />',$html);

    Wieso sollte das nicht gehen ?
     

Ähnliche Themen

  1. RegEx HTML Tags+INHALT entfernen
    Von ReggaePanda im Forum PHP
    Antworten: 13
    Letzter Beitrag: 17.07.10, 13:29
  2. Problem mit preg replace
    Von starfoxfs im Forum PHP
    Antworten: 2
    Letzter Beitrag: 01.09.09, 12:29
  3. Preg-replace mit Ausnahmen
    Von Wissenscoder im Forum PHP
    Antworten: 1
    Letzter Beitrag: 19.12.07, 14:07
  4. HTML Tags schließen nach substr()
    Von BobDerMeister im Forum PHP
    Antworten: 7
    Letzter Beitrag: 08.09.06, 20:23
  5. HTML-Tags mit REGEX filtern, Problem
    Von Act of Fate im Forum PHP
    Antworten: 1
    Letzter Beitrag: 20.09.04, 17:31