[REGEX] HTML-Tags kleinschreiben

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [REGEX] HTML-Tags kleinschreiben

    Ich will ein Skript machen, wo alle HTML-Tags kleingeschrieben werden sollten. Ich habe da Folgendes versucht:

    PHP-Code:
    $patterns ] = '/\<(\s*)(\/?)(\s*)(\S+)(\s*)\>/ieu';
    $replace ] = '\'<$1$2$3\' . lowercase ( $4 ) . \'$5>\'';
    $htmlCode preg_replace $patterns$replace$htmlCode ); //Zeile 76 
    Fehler:

    Parse error: syntax error, unexpected '<' in /home/kunden/webs/american/pgms/template.php(76) : regexp code on line 1

    Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: '&lt;' . lowercase ( b&gt;Test-Design&lt;/b ) . '&gt;' in /home/kunden/webs/american/pgms/template.php on line 76


    Zeile 76 habe ich im Code kommentiert.

    Was habe leider keinen so guten Ueberblick ueber Regulaere Ausdruecke. Mein Problem war hier, dass ich eine Funktion einbauen soll, aber nicht richtig weiss, wie. Ich kenne mich auch mit den Modifiers nicht so aus und habe 'eiu' genommen, weil ich so das Gefuehl hatte.



    Was muss man an dem Code aendern, damit es funktioniert, bzw. gibt es eine elegantere Variante?

  • #2
    na dan schau Dir mal ZEile 75 an
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Dazu gibt es preg_replace_callback()
      Den u-Modifikator brauchst du nur, wenn du utf-8-Code verwendest. Hingegen wäre U dringend zu empfehlen. e brauchst du wahrscheinlich auch nicht, aber genaueres zu den Modifikatoren findest du hier.
      [edit]
      Aber den von MelloPie genannten Fehler musst du natürlich zuerst beheben.
      Zuletzt geändert von H2O; 20.12.2007, 08:19.
      Gruss
      H2O

      Kommentar


      • #4
        http://de.php.net/strtolower

        Kommentar


        • #5
          Original geschrieben von MelloPie
          na dan schau Dir mal ZEile 75 an
          Genau Zeile 75 ist meinn Problem. Ich habe ja deshalb auch das geschrieben"

          Mein Problem war hier, dass ich eine Funktion einbauen soll, aber nicht richtig weiss, wie.
          Mit dem Link zur PHP-Seite, wo die strtolower-Funktion beschrieben wird, kann ich auch nichts anfangen. Immerhin weiss ich ja, was die Funktion alles bewirkt etc. Mein Problem ist hingegen nicht die Funktion selbst, sondern wie man sie zu regulaeren Ausdruecken einbaut.

          @H2O: Danke mit dem Modifikatoren-Tipp. Ich hatte wohl u und U verwechselt. e habe ich benutzt, da es unter preg_replace auf der PHP-Seite in Beispiel 4 geschrieben wurde.

          Kommentar


          • #6
            So gehts auch:
            PHP-Code:
            $html '<html>
             <BODY>
            <b>a<i>b</i>a</b>
             </body>
            </html>'
            ;

            $doc = new DOMDocument;
            $doc->loadHTML($html);
            echo 
            $doc->saveHTML(); 
            Und Tidy kann das wohl auch...
            Wir werden alle sterben

            Kommentar


            • #7
              Das mit den Modifikatoren war so ein Nebenprodukt, aber den wichtigeren Link, den ich dir geschickt habe, hast du scheinbar nicht angeschaut. dabei würde der dein Problem fast selber lösen:
              PHP-Code:
              $pattern '|<[^>]*(\\w+)\\W*>|iU';  
              $htmlCode preg_replace_callback$pattern'lower'$htmlCode ); 

              function 
              lower($found){
                  return 
              strtolower($found[0]);

              Gruss
              H2O

              Kommentar


              • #8
                @H2O: Doch ich habe ihn mir schon angeschaut, aber leider habe ich auch nicht weiter gewusst. Jetzt wo du das Beispiel aber gepostet hast, ist mir eh alles klar. Danke.

                Kommentar


                • #9
                  Okay, nun hat es geklappt. Danke fuer eure Geduld und Hilfe.

                  Nun habe ich jedoch ein anderes Problem.

                  Ich will in dieser callback-Funktion auf $this->get ( $matches [ 1 ] ); zugreifen, also einer Funktion in der Klasse.

                  Leider bekomme ich da immer diesen Fehler:

                  Fatal error: Using $this when not in object context in /home/kunden/webs/test.php on line ...

                  Ich kann auch innerhalb der Funktion nicht global reinschreiben. Was gibt es da fuer eine Loesung?

                  Kommentar


                  • #10
                    PHP-Code:
                    preg_replace_callback($pattern, array($this'callback'), $subject

                    Kommentar


                    • #11
                      Wenn preg_replace_callback() die allgemeine Syntax für Callbacks unterstützt, dann musst du folgendes als Callback übergeben:
                      PHP-Code:
                      array( $myObject'lower' 

                      Kommentar


                      • #12
                        PHP-Code:
                                function replaceVars $htmlCode ) {
                                
                                    
                        $patterns ] = '/\<\s*var\s*\>(\w+)\<\s*\/\s*var\s*\>/iU';
                                    
                                    function 
                        replaceVar $matches$this ) {
                                    
                                        if ( 
                        $this->getVar $matches ] ) ) {
                                        
                                            return 
                        $this->getVar $matches ] );
                                            
                                        } else {
                                        
                                            return 
                        $matches ];
                                            
                                        }
                                    
                                    }
                                    
                                    
                        $htmlCode preg_replace_callback$patterns, array ( $this'replaceVar' ), $htmlCode );  //Zeile 80
                                    
                                    
                        return $htmlCode;
                                    
                                } 
                        Also ich habe da einmal das gemacht. Es sollte fuer eine Template-Klasse sein. $this->getVar gibt false zurueck, falls die Template-Variable nicht gesetzt wird, ansonsten den Wert der Variable.

                        Ich bekomme da leider immer diese Meldung:

                        Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, 'Template::replaceVar', to be a valid callback in /home/kunden/webs/template.php on line 80

                        Wie verwende ich also nun dieses $this in Zusammenhang mit einer Funktion richtig?

                        Kommentar


                        • #13
                          replaceVar muss natürlich eine Methode der Klasse sein und keine Funktion. Da ist es ja kein Wunder, dass du die Fehlermeldung bezüglich $this erhalten hast!

                          Kommentar

                          Lädt...
                          X