Ankündigung

Einklappen
Keine Ankündigung bisher.

String Highlighten

Einklappen

Neue Werbung 2019

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

  • String Highlighten

    Moin..

    Ich habe eine kleine Funktion, um einen PHP String zu highlighten:

    PHP-Code:
    $bbcode preg_replace("~\[php\](.+?)\[/php\]~smi"'<div class="code">'.highlight_string('\\1'true).'</div>'$bbcode); 
    Die Tags werden richtig ersetzt und auch alles schön in den Div geschrieben, aber der String wird aus einem mir unerfindlichen Grund einfach nicht gehiglightet.

    Könnt ihr mir vielleich helfen?

    Danke


  • #2
    Du kannst so in preg_replace auch keine Funktion aufrufen. Es würde ja ERST highlight_string() aufgerufen werden mit dem String "\\1" und die Rückgabe würde dann zwischen die <div> geschrieben werden. UND DANN würde preg_replace aufgerufen werden mit dem entsprechendem String.

    Was du suchst ist vlt. eher: PHP: preg_replace_callback - Manual

    Kommentar


    • #3
      Unter PHP 5.3 funktionierts so

      PHP-Code:
      $bbcode preg_replace_callback("~\[php\](.+?)\[/php\]~smi", function($matches) {
          return 
      '<div class="code">' highlight_string($matches[1], true) . '</div>';
      }, 
      $bbcode

      Kommentar


      • #4
        Ok,

        habe jetzt mal meine Funktion überarbeitet:

        PHP-Code:
        function php_bb($s)
        {
            
        $suche = array('!\[php\](.+)\[\/php\]!iUse');
            
        $ersetzung = array('<div class="code">'.highlight_string('$1'true).'</div>');
            
        $s preg_replace($suche$ersetzung$s); 
            
            return 
        $s;

        Jetzt bekomme ich immer folgende Fehlermeldung:

        Parse error: syntax error, unexpected '<' in /var/www/web517/html/betapage/functions/functions.php(565) : regexp code on line 1

        Fatal error: preg_replace() [<a href='function.preg-replace'>function.preg-replace</a>]: Failed evaluating code: &lt;div class=&quot;code&quot;&gt;&lt;code&gt;&lt;span style=&quot;color: #000000&quot;&gt; &lt;?php echo \\\'kleiner test\\\'; ?&gt; &lt;/span&gt; &lt;/code&gt;&lt;/div&gt; in /var/www/web517/html/betapage/functions/functions.php on line 565

        Kommentar


        • #5
          Weil du exakt das selbe Problem hast. PHP führt ERST die Funktionen aus. Heißt highlight_string wird ERST ausgeführt mit dem Inhalt $1, dabei wird wohl $1 rauskommen. Heißt im Array steht dann
          [code]<div class="code">$1</div>[code]

          Und erst DANN wird preg_replace ausgeführt und zwar mit dem Array von oben.

          Aber les bitte nochmal die beiden Beiträge oben!

          Kommentar


          • #6
            Zitat von draco88 Beitrag anzeigen
            Unter PHP 5.3 funktionierts so

            PHP-Code:
            $bbcode preg_replace_callback("~\[php\](.+?)\[/php\]~smi", function($matches) {
                return 
            '<div class="code">' highlight_string($matches[1], true) . '</div>';
            }, 
            $bbcode
            Habe mir es nochmal angeschaut.
            Jetzt verstehe ich das mit dem callback auch. Danke.
            Allerdings, bekomme ich bei deinem Lösungsansatz immer eine Fehlermeldung:

            Parse error: syntax error, unexpected T_FUNCTION in /var/www/web517/html/betapage/functions/functions.php on line 556

            Kommentar


            • #7
              Ersetze function... durch
              PHP-Code:
              create_function('$matches','return......'); 
              Da hättest du auch selbst drauf kommen können, wenn du das manual angeschaut hättest!
              "Dummheit redet viel..Klugheit denkt und schweigt.." [Amgervinus]

              Kommentar


              • #8
                natürlich kann man auch mit preg_replace arbeiten! Man muss es nur richtig anwenden!

                PHP-Code:
                function php_bb($s)
                {
                    
                $suche = array('!\[php\](.+)\[\/php\]!iUse');
                    
                $ersetzung = array('"<div class=\"code\">".highlight_string("$1", true)."</div>"');
                    
                $s preg_replace($suche$ersetzung$s); 
                    
                    return 
                $s;

                sigpic

                Kommentar


                • #9
                  Zitat von Destruction Beitrag anzeigen
                  Ersetze function... durch
                  PHP-Code:
                  create_function('$matches','return......'); 
                  Da hättest du auch selbst drauf kommen können, wenn du das manual angeschaut hättest!
                  Habe es auch so gemacht.
                  Habe zu schnell gepostet.
                  Sorry

                  Kommentar


                  • #10
                    Zitat von Frank Beitrag anzeigen
                    natürlich kann man auch mit preg_replace arbeiten! Man muss es nur richtig anwenden!

                    PHP-Code:
                    function php_bb($s)
                    {
                        
                    $suche = array('!\[php\](.+)\[\/php\]!iUse');
                        
                    $ersetzung = array('"<div class=\"code\">".highlight_string("$1", true)."</div>"');
                        
                    $s preg_replace($suche$ersetzung$s); 
                        
                        return 
                    $s;

                    Und wenn das dann im BBCode steht kann jeder PHP Code ausführen oder wie?

                    Kommentar


                    • #11
                      Also ich bekomme da keinen Angriffsvektor gebastelt.
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar

                      Lädt...
                      X