Anzeige:
Ergebnis 1 bis 10 von 10

Thema: Bestimmte zeichenfolgen in Strings ersetzen?

  1. #1
    Registrierter Benutzer
    Registriert seit
    23.08.2002
    Ort
    Haiger am Niel *g*
    Beiträge
    74

    Bestimmte zeichenfolgen in Strings ersetzen?

    Hi,
    ich bin gerade dabei ein Gästebuch zu schreiben und will HTML-Verbieten.
    Stattdessen habe ich versucht einen eigenen Code einzubauen wie man ihn aus einigen Foren (wie auch diesem) kennt.
    Diesen Code muss ich nur beim anzeigen wieder in HTML-Code übersetzen. Das ist weiter kein Problem, ich habe folgenden code mal als beispiel:
    PHP-Code:
    # $eingabe ist der string der den Eintrag entählt.
    do{
    $img_array explode("[img]",$eingabe);
    $img_string explode("[/img]",$img_array[1]);
    $eingabe str_replace("[img]".$img_string[0]."[/img]","<img src=\"".$img_string[0]."\">",$eingabe);
    } while(
    strstr($eingabe,"[img]")); 
    Das funktioniert aber leider nur solange, wie "img" klein geschrieben wurde. Wie muss ich den Code verändern, damit auch "Img", "iMg", "imG", "IMg", "iMG", "ImG" und "IMG" ersetzt wird?
    [Workstation]Intel Core2 Duo E8400/4GB, ATI HD4830 @ kUbuntu/Win7pro
    [Server] Via Epia SP13000/512MB @ Ubuntu LTS Server
    [Mobil] Intel Pentium M 1,86Ghz/512MB/ATI X600M (Asus M6974VLP) @ xUbuntu

  2. #2
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Die Schleife ist sinnlos, da alle Replace Funktionen in PHP den gesamten String parsen. Für Case sensitive musst du leider eregi_replace benutzen - obwohl diese langsamer ist.

    PHP-Code:
    eregi_replace("\[img\]([^\"]*)\[\/img\]""<img src=\"\\1\">"$eingabe); 
    Das dürfte dein gesamtes Problem lösen. Zur Not musst du preg_replace benutzen, und zwar so:

    PHP-Code:
    preg_replace("/\[img]([^\"]*)\[\/img\]/siU""<img src=\"\\1\" border=0>"$eingabe); 
    Das Filtert alle img - Tags aus deinem String raus.
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

  3. #3
    Registrierter Benutzer
    Registriert seit
    23.08.2002
    Ort
    Haiger am Niel *g*
    Beiträge
    74
    moooment... das war einen schritt zu schnell. Hab ma bei php.net im manual geguckt was diese Funktion macht, und ich muss sagen ich kann deinen Code nicht ganz nachvollziehen. Dazu mus ich sagen das ich nicht besonders viel Ahnung davon habe
    Jedenfalls sacht mir mein script wenn ich es ausführe
    Code:
     
    Warning: Unknown modifier 'g' in /daten/home/gh05t/public_html/gb/index.php on line 1168
    PS: Mein Code oben hat 1a funktioniert, ist zwar sicherlich zu umständlich aber keineswegs sinnlos (die schleife). Guck dir mein replace ma genau an. Da wir immer nur ein img-tag ersetzt. Wenn dann noch einer drin ist, wird die schleife noch mal durchlaufen.
    [Workstation]Intel Core2 Duo E8400/4GB, ATI HD4830 @ kUbuntu/Win7pro
    [Server] Via Epia SP13000/512MB @ Ubuntu LTS Server
    [Mobil] Intel Pentium M 1,86Ghz/512MB/ATI X600M (Asus M6974VLP) @ xUbuntu

  4. #4
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    ja, war ein kleines Problem mit Backslashes

    PHP-Code:
    eregi_replace("\\[img\\]([^\"]*)\\[/img\\]",_"<img src=\"\\\1\">"$eingabe); 
    so, sollte das funktionieren...

  5. #5
    Registrierter Benutzer
    Registriert seit
    23.08.2002
    Ort
    Haiger am Niel *g*
    Beiträge
    74
    Aber ich hab ne andere Lösung:
    PHP-Code:
    do{
    preg_match("/\[img]([^\"]*)\[\/img\]/siU",$eingabe,$img_string);
    $eingabe=str_replace($img_string[0],"<img src=\"".$img_string[1]."\" border=0>",$eingabe);
    }while(
    stristr($eingabe,"[img]")); 
    Den Befehl hab ich bei php.net gefunden und gleich mal ausprobiert...
    Was ist damit?

    /edit: Das funced gut, nur wenn der string zwischen img und /img ein " steht gibts einen Fehler beim Laden des scripts... (Endlosschleife)
    Geändert von ~Gh05t~ (25-01-2003 um 15:45 Uhr)
    [Workstation]Intel Core2 Duo E8400/4GB, ATI HD4830 @ kUbuntu/Win7pro
    [Server] Via Epia SP13000/512MB @ Ubuntu LTS Server
    [Mobil] Intel Pentium M 1,86Ghz/512MB/ATI X600M (Asus M6974VLP) @ xUbuntu

  6. #6
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Versuch mal den Regulären Ausdruck den du jetzt bei preg_match benutz in preg_replace also:

    PHP-Code:
    preg_replace("...""<img src=\"\\\\1\">"$eingabe); 
    Dann kannst du auf die komplette Schleife verzichten. (Ich hoffe die Backslashes werden jetzt richtig übersetzt)
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

  7. #7
    Registrierter Benutzer
    Registriert seit
    23.08.2002
    Ort
    Haiger am Niel *g*
    Beiträge
    74
    hmmm... nope, funced auch nit... macht einfach gar nichts.
    Ich hab jetzt
    Code:
    preg_replace("/\[img]([^\"]*)\[\/img\]/siU","<img src=\"\\1\" border=0>",$eingabe);
    PS: Schreib mir lösungen bitte mal in [ code ] tags, [ php ] macht ein paas backslashes weg...
    [Workstation]Intel Core2 Duo E8400/4GB, ATI HD4830 @ kUbuntu/Win7pro
    [Server] Via Epia SP13000/512MB @ Ubuntu LTS Server
    [Mobil] Intel Pentium M 1,86Ghz/512MB/ATI X600M (Asus M6974VLP) @ xUbuntu

  8. #8
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    Okay. So wie ich es jetzt poste funkt es bei mir:

    Code:
    /* snip */
    
    $searcharray[]="/\[img]([^\"]*)\[\/img\]/siU";
    $replacearray[]="<img src=\"\\1\" border=0>";
    
    /* somewhere later in the sourcekot */
    
    $data = preg_replace($searcharray, $replacearray, $data);
    (Wobei $data natürlich die Eingabe enthält)
    Seine Rätselhaftigkeit wird nur durch seine Macht übertroffen!

  9. #9
    Registrierter Benutzer
    Registriert seit
    23.08.2002
    Ort
    Haiger am Niel *g*
    Beiträge
    74
    Ok, das funktioniert!
    Aber ich habe immer noch das Problem mit den Anführungszeichen (mit anderen vielleicht auch?)
    Ich habe z.B. folgende Zeile:
    Code:
    $eingabe = preg_replace("/\[b]([^\"]*)\[\/b\]/siU","<b>\\1</b>",$eingabe);
    Wenn ich jetzt einen Eintrag habe wie
    Code:
     [B ]"test"[ /b]
    wird dieser nicht interpretiert.
    Hier hätte ich noch die Möglichkeit das so zu lösen, das ich die b und /b tags einzeln ersetze, also mit
    Code:
    $eingabe = preg_replace("/\[b]/siU","<b>",$eingabe);
    $eingabe = preg_replace("/\[\/b]/siU","</b>",$eingabe);
    Das hätte nur den Nachteil, das für den Rest meiner HTML-Ausgabe ein b-tag geöffnet wäre, wenn der Einträger den tag nicht mehr geschlossen hat.
    Lässt sich das Problem irgendwie lösen?

    PS: Damn, wozu hat man die Code und PHP tags, wenn sie doch nicht das ausgeben was sie sollen?
    [Workstation]Intel Core2 Duo E8400/4GB, ATI HD4830 @ kUbuntu/Win7pro
    [Server] Via Epia SP13000/512MB @ Ubuntu LTS Server
    [Mobil] Intel Pentium M 1,86Ghz/512MB/ATI X600M (Asus M6974VLP) @ xUbuntu

  10. #10
    Registrierter Benutzer
    Registriert seit
    02.12.2002
    Ort
    Darmstadt
    Beiträge
    615
    probier den Regulären Ausdruck mal im preg_replace

    Code:
    /\[b](.*)\[\/b\]/siU

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •