[REGEX] und php-funktionen

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

  • [REGEX] und php-funktionen

    so. ich mal wieder mit einem regex problem...

    $this->_html_data = preg_replace('!href="(.*?)"!ise', '\'href="qwe'.strtoupper('\\1').'"\'', $this->_html_data);

    die og. regex soll innerhalb des href eine php-fkt durchlaufen. hier im beispiel ist jetzt mal strtoupper() gewählt.

    allerdings wird die fkt scheinbar ignoriert. das 'qwe' (nur test) wird jetzt darstellt....

    wer weiss rat?

    *) ohne php/code tags wegen \ in der regex
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |



  • #2
    bei mir klappt das:
    Code:
    function change($wert)
    {
      $wert = 'href="qwe'.strtoupper($wert).'"';
      return $wert;
    }
    echo $test = preg_replace('!href="(.*?)"!ise', "change(\\1)", $test);
    ... vielleicht gibts noch was besseres
    Kissolino.com

    Kommentar


    • #3
      versuch mal in dem replacement mit " anstatt ' zu arbeiten.

      Kommentar


      • #4
        @Wurzel....
        so gehts bei mir...
        $this->_html_data = preg_replace('!href="(.*?)"!ise', "\$this->change('\\1')", $this->_html_data);

        @Tobi
        habs so probiert ....
        $this->_html_data = preg_replace('!href="(.*?)"!ise', "href=\"qwe".strtoupper('\\1')."\"", $this->_html_data);
        ... klappt aber leider nicht...


        ich denke, ich werde Wurzel's lösung nehmen, wenn mir keiner ne bessere alternative gibt....
        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


        Kommentar


        • #5
          Original geschrieben von Abraxax
          @Wurzel....
          so gehts bei mir...
          $this->_html_data = preg_replace('!href="(.*?)"!ise', "\$this->change('\\1')", $this->_html_data);
          ich wollt jetzt nicht noch extra ne klasse basteln ... nen bischen mitarbeiten musst du schon
          Kissolino.com

          Kommentar


          • #6
            Original geschrieben von Wurzel
            ich wollt jetzt nicht noch extra ne klasse basteln ... nen bischen mitarbeiten musst du schon
            nene. so war das schon nicht gemeint. ich wollte damit mein lob dir gegenüber zum ausdruck bringen...
            INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


            Kommentar


            • #7
              so. ich habe mit jetzt noch einmal das beispiel im manual genauer angesehen......

              ... das mit dem zusätzlichen fkt-aufruf gefiehl mir ja nicht so gut.... (wäre aber zur not gegangen)

              und im manual haben die ja auch strtoupper() einfach so aufgerufen.

              wie ich feststellen musst, habe ich vorhin im man-beispiel wohl nur ein paar ' übersehen..

              naja. nun geht es auch so...

              $this->_html_data = preg_replace('!href="(.*?)"!ise', "'href=\"'.strtoupper('\\1').'\"'", $this->_html_data);

              thx dennoch @wurzel && @tobi
              INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


              Kommentar


              • #8
                genau so meinte ich

                BTW: kriegst du die code-taste nicht hin?

                Kommentar


                • #9
                  Original geschrieben von TobiaZ
                  genau so meinte ich
                  aso. ich hatte das vorhin anderes getestet....

                  Original geschrieben von TobiaZ
                  BTW: kriegst du die code-taste nicht hin?
                  bittesehr...
                  Code:
                  $this->_html_data = preg_replace('!href="(.*?)"!ise', "'href=\"'.strtoupper('\\1').'\"'", $this->_html_data);
                  INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                  Kommentar


                  • #10
                    *argh*, dasselbe theater hatte ich am WE und hab's dann mit der
                    externen fkt gelöst. auf die zusätzlichen "/' wär ich nie gekommen.
                    Kissolino.com

                    Kommentar


                    • #11
                      und ich wollte es eben nicht mit der externen fkt machen..

                      aber jetzt weisst du auch die bessere lösung...
                      INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                      Kommentar


                      • #12
                        ich bin wieder an der regex dran. aber ein einer weiteren... also diesmal nichts mit funktionen...

                        folgende situation:

                        ich habe eine html-code (eine seite), die wie folgt aussehen kann.
                        Code:
                        <html>
                        ...
                        ...
                        ...
                        
                        <body ....>
                        
                            html-code
                            html-code
                            html-code
                            html-code
                            html-code
                            html-code
                            html-code
                        
                        </body>
                        </html>
                        nun möchte ich den inhalt der body als javascript darstellen.
                        (nicht fragen warum ... ich muss das so haben. )
                        Code:
                        <html>
                        ...
                        ...
                        ...
                        
                        <body ....>
                        
                        <script type="text/javascript">
                        document.write('    html-code');
                        document.write('    html-code');
                        document.write('    html-code');
                        document.write('    html-code');
                        document.write('    html-code');
                        document.write('    html-code');
                        document.write('    html-code');
                        </script>
                        
                        </body>
                        </html>
                        meine regex-tests haben mit bisher folgende lösung geliefert.
                        Code:
                                    $this->_html_data = preg_replace('!<body(.*?)>(.*?)</body>!is',
                                                                     '<body$1>
                                                                     <script type="text/javascript">
                                                                     document.write(\'$2\');
                                                                     </script></body>',
                                                                     $this->_html_data);
                        das ganze funktioniert jetzt schon einmal so, dass ich den ganzen inhalt als javascript habe.
                        allerdings sind hierbei auch die umbrüche enthalte, wo js ein wenig meckert..

                        wie kann ich nun mit regex das so darstellen, dass er mit in jeder zeile
                        das document.write(' davor und das '); dahinter schreibt?

                        ich wollte ungern den code mit preg_match() filtern, das als array bei \n exploden , via for() durchlaufen und wieder mit implode() zusammenfassen und anschliessend wieder in die seite einbinden.
                        INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                        Kommentar


                        • #13
                          nicht so schön, wie ich es mir vorgestellt habe, aber es funktioniert....

                          Code:
                          preg_match_all ('!<body.*?>(.*?)</body>!is', $this->_html_data, $temp_ma);
                          $body_arr = explode ("\r\n", $temp_ma[1][0]);
                          unset($temp_ma);
                          for ($i=0;$i<count($body_arr);$i++)
                              $body_arr[$i] = "document.write('".$body_arr[$i]."');";
                          $new_body = "\r\n".'<script type="text/javascript">'."\r\n".implode("\r\n", $body_arr)."\r\n".'</script>'."\r\n";
                          $this->_html_data = preg_replace ('!<body(.*?)>(.*?)</body>!is', '<body$1>'.$new_body.'</body>', $this->_html_data);
                          PHP-Code:
                          preg_match_all ('!<body.*?>(.*?)</body>!is'$this->_html_data$temp_ma);
                          $body_arr explode ("\r\n"$temp_ma[1][0]);
                          unset(
                          $temp_ma);
                          for (
                          $i=0;$i<count($body_arr);$i++)
                              
                          $body_arr[$i] = "document.write('".$body_arr[$i]."');";
                          $new_body "\r\n".'<script type="text/javascript">'."\r\n".implode("\r\n"$body_arr)."\r\n".'</script>'."\r\n";
                          $this->_html_data preg_replace ('!<body(.*?)>(.*?)</body>!is''<body$1>'.$new_body.'</body>'$this->_html_data); 
                          evtl kann mir MelloPie oder TBT *beideliebanschau* eine bessere alternative geben.
                          INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


                          Kommentar


                          • #14
                            Geht es denn nicht einfach so:
                            Code:
                            <?php
                            $foo = "hmtl
                            html
                            html
                            html";
                            $bar = '<script type="text/javascript">
                            document.write(\''.str_replace(chr(13).chr(10), '\');
                            document.write(\'', $foo).'\');
                            </script>';
                            ?>
                            EDIT:

                            oops, er mag di "\" nicht!
                            also:


                            EDIT:

                            2:
                            Siehe nächster Post (anhang)



                            is zwar nicht schön, aber tut doch eigendlich was es soll, oder nech!?
                            Zuletzt geändert von Tartax; 14.10.2003, 20:01.
                            Die Musikreview Seite

                            hi, i'm a signature virus. copy me into your signature to help me spread.

                            Kommentar


                            • #15
                              mist, er mag sie immernochnicht , dann halt als anhang:
                              Angehängte Dateien
                              Die Musikreview Seite

                              hi, i'm a signature virus. copy me into your signature to help me spread.

                              Kommentar

                              Lädt...
                              X