highlight_string ohne <?php und ?>

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

  • highlight_string ohne <?php und ?>

    Hallo, ich habe folgende Funktion zum syntax highlighten:
    PHP-Code:
    function color_source($string)
                 {
                
    $array_contenido explode("[PHP]",$string);
                
    $final $array_contenido[0];
                for(
    $i 1;$i <= count($array_contenido) - 1;$i++)
                    {
                    
    $array_contents explode(
    ",$array_contenido[$i]);

    ob_start();
    $string = preg_replace("/&gt;/",">",$array_contents[0]);
    $string = preg_replace("/&lt;/","<",$string);
    $string = preg_replace("!<br />!","",$string);
    highlight_string("<?php ".$string." ?>");
    $array_contents[0] = ob_get_contents();
    ob_end_clean();
    $code = preg_replace("","",$array_contents[0]);
    $final .='
    <br><table width="80%" class="text" align="center" cellpadding="2" cellspacing="0"><tr><td><b>PHP Code:</b></td></tr><tr><td bgcolor="#ffffff">'.$array_contents[0]."</td></tr></table><br>".$array_contents[1];
    }
    return $final;
    }
    [/PHP]
    Nuja, diese Zeile nervt: highlight_string("<?php ".$string." ?>");
    Andrerseits, kann cih die <?php und ?> nicht weglassen, denn gibt ein User einen phpcode ohne selbige ein, dann wird nichts gehighlightet.
    Wie kann ich es machen wie hier im Forum, also es wird genau das gehighlightet was der user eingibt, nichts dazugefügt oder weggenommen.
    Ich hoffe ihr habt verstanden, was ich will.
    MfG Oli

  • #2
    Re: highlight_string ohne &lt;?php und ?&gt;

    Original geschrieben von OliOli
    Nuja, diese Zeile nervt: highlight_string("<?php ".$string." ?>");
    was bitte verstehst du unter "nervt" ...?
    Wie kann ich es machen wie hier im Forum, also es wird genau das gehighlightet was der user eingibt, nichts dazugefügt oder weggenommen.
    schreibe dir eine eigene funktion, die genau das macht, was du willst.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      ok, anders: highlight_string() funktioniert nur, wenn vor dem zu highlightenden code ein <?php oder <? steht, und danach ein ?>

      Damit also code auch gehighlightet wird, bei welchem der user kein <?php und ?> benutzt hat, füge ich in der benannten Zeile diese Tags dazu.
      1. Will ich nicht, dass der code des users dadurch verändert wird, wenn er also die tags weglässt, dann sollen sie auch weg bleiben
      2. wenn er sie schreibt, sind sie doppelt vorhanden. (Ist ja klar, einmal im Ursprung und im code werden sie nochmal angefügt)

      Und da highlight_sttring eben nur funzt wenn sie vorhanden ist, frage ich ob jemand ne Lösung weiß, wie ich highlighten kann ohne dass die tags nachher da sind.

      Verständlicher krieg ichs auf die Schnelle nicht hin, sorry. Ich bin Anfänger, also bitte nicht aufregen.
      MfG Oli

      Kommentar


      • #4
        prüfe, ob sie NICHT da sind. wenn dies der fall ist, schreibe sie dabei, mache das highlighting und nimm sie hinterher wieder aus dem code bei der darstellung raus.
        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
          ok, ich hab die fkt mal umgeschrieben:

          [PHP]function color_source($string)
          {
          $array_contenido = explode("
          PHP-Code:
          ",$string);
                      $final = $array_contenido[0];
                      for($i = 1;$i <= count($array_contenido) - 1;$i++)
                          {
                          $array_contents = explode("[/ PHP]",$array_contenido[$i]);
                          if(substr($array_contents[0],0,5) == "&lt;?") $start = "";
                          else $start = "<?php";
                          if(substr(strrev($array_contents['0']),0,2) == "&gt;?") $ende = "";
                          else $ende = "?>";
                          ob_start();
                          $string = preg_replace("/&gt;/",">",$array_contents[0]);
                          $string = preg_replace("/&lt;/","<",$string);
                          $string = preg_replace("!<br />!","",$string);
                          highlight_string($start.$string.$ende);
                          $array_contents[0] = ob_get_contents();
                          ob_end_clean();
                                          if($start != "") $fertig = preg_replace("!&lt;\?php!","",$array_contents[0]);
                          else $fertig = $array_contents[0];
                          if($ende != "") $fertig = preg_replace("!\?&gt;!","",$fertig);
                          $final .='
                          <br><table width="80%" class="text" align="center" cellpadding="2" cellspacing="0"><tr><td><b>PHP Code:</b></td></tr><tr><td bgcolor="#ffffff">'.$fertig."</td></tr></table><br>".$array_contents[1];
                          }
                      return $final;
                      }
          Ok, bei <?php funzt es. Aber nicht beim ende, jetzt werden nirgendwo mehr die end-tags angezeigt. Warum?
          MfG Oli

          Kommentar


          • #6
            ich weiss zwar nicht, warum du das so machst.... ich habe mal deinen code etwas verändert...

            ungetestet...[php]
            <?php

            function color_source($string)
            {
            $array_contenido = explode("
            PHP-Code:
            ",$string);
                $final = $array_contenido[0];
                for($i = 1;$i <= count($array_contenido) - 1;$i++)
                {
                    $array_contents = explode("[/ PHP]",$array_contenido[$i]);

                    $added = false;
                    if (!preg_match('!(\\<\\?php|\\<\\?)(.*?)\\?\\>!si', $array_contents))
                    {
                        $added = true;
                        $array_contents = '<?php '.$array_contents.'?>';
                    }
                            
                    $string = $array_contents[0];

                    // $string = preg_replace("/&gt;/",">",$array_contents[0]);
                    // $string = preg_replace("/&lt;/","<",$string);
                    // $string = preg_replace("!<br />!","",$string);

                    ob_start();
                    highlight_string($string);
                    $array_contents[0] = ob_get_contents();
                    ob_end_clean();

                    if ($added)
                        $fertig = preg_replace('!(\\<\\?php|\\<\\?)(.*?)(\\?\\>)!si', '\\\\2', $array_contents);
                    
                    $final.= '<br><table width="80%" class="text" align="center" cellpadding="2" cellspacing="0">';
                    $final.= '<tr><td><b>PHP Code:</b></td></tr><tr><td bgcolor="#ffffff">'.$fertig.'</td></tr>';
                    $final.= '</table><br>'.$array_contents[1];
                }
                return $final;
            }

            ?>
            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
              [edit]

              hm, hab ein bisschen getüftelt.
              [PHP]function color_source($string)
              {
              $array_contenido = explode("
              PHP-Code:
              ",$string);
                  $final = $array_contenido[0];
                  for($i = 1;$i <= count($array_contenido) - 1;$i++)
                  {
                      $array_contents = explode("[/ PHP]",$array_contenido[$i]);
                      $added = false;
                      if (!preg_match('!(&lt;\?php|&lt;\?)(.*?)\?&gt;!si', $array_contents[0]))
                      {
                          $added = true;
                          $array_contents[0] = '<?php '.$array_contents[0].'?>';
                      }       
                      $string = $array_contents[0];
                      $string = preg_replace("/&gt;/",">",$string);
                      $string = preg_replace("/&lt;/","<",$string);
                      $string = preg_replace("!<br />!","",$string);

                      ob_start();
                      highlight_string($string);
                      $array_contents[0] = ob_get_contents();
                      ob_end_clean();
                      if ($added)
                          $fertig = preg_replace('!(\<\?php|\<\?)(.*?)(\?\> )!si', '\\2', $array_contents[0]);
                      else
                          $fertig = $array_contents[0];
                      $final.= '<br><table width="80%" class="text" align="center" cellpadding="2" cellspacing="0">';
                      $final.= '<tr><td><b>PHP Code:</b></td></tr><tr><td bgcolor="#ffffff">'.$fertig.'</td></tr>';
                      $final.= '</table><br>'.$array_contents[1];
                  }
                  return $final;
              }
              komischerweise entfernt er nicht die geaddeten <?php und ?> bei den codes, die keine hatten. Also gibt der user keine tags ein, werden trotzdem welche angezeigt. Also ist die replace funktion nicht in Ordnung..
              Zuletzt geändert von OliOli; 27.10.2003, 21:05.

              Kommentar


              • #8
                dann tausche mal ....
                Code:
                if ($added)
                    $fertig = preg_replace('!(<?php|<?)(.*?)(?> )!si', '\2', $array_contents[0]);
                else
                    $fertig = $array_contents[0];
                .... gegen ....
                PHP-Code:
                $fertig $added preg_replace('!(&amp;lt;\\?php|\\&amp;lt;\\?)(.*?)(\\&amp;gt;\\>)!si''\\\\2'$array_contents[0]) : $array_contents[0]; 
                ... da ist nämlich nicht korrekt ersetzt.
                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


                • #9
                  buhu.....

                  also das geht immer noch nciht mit dem ersetzen am schluss!

                  Ich habe mir den code mal mittendrin ausgeben lassen, und es stehen da &gt; und &lt;.

                  Warum ersetzt der das dann nicht? Verflucht! grml

                  hülfe! Oli

                  Kommentar


                  • #10
                    Ich habe mir den code mal mittendrin ausgeben lassen, und es stehen da &gt; und &lt;.
                    was ist dein code?

                    Kommentar


                    • #11
                      hm, nochmal die komplette momentane Funktion:

                      [PHP]function color_source($string)
                      {
                      $array_contenido = explode("
                      PHP-Code:
                      ",$string);
                          $final = $array_contenido[0];
                          for($i = 1;$i <= count($array_contenido) - 1;$i++)
                          {
                              $array_contents = explode("[/ PHP]",$array_contenido[$i]);
                              $added = false;
                              if (!preg_match('!(&lt;\?php|&lt;\?)(.*?)\?&gt;!si', $array_contents[0]))
                              {
                                  $added = true;
                                  $array_contents[0] = '<?php '.$array_contents[0].'?>';
                              }
                              $string = $array_contents[0];
                              $string = preg_replace("/&gt;/",">",$string);
                              $string = preg_replace("/&lt;/","<",$string);
                              $string = preg_replace("!<br />!","",$string);

                              ob_start();
                              highlight_string($string);
                              $array_contents[0] = ob_get_contents();
                              ob_end_clean();
                              echo $array_contents[0];
                                  // $fertig = preg_replace('!(\<\?php|\<\?)(.*?)(\?\> )!si', '\\2', $array_contents[0]);
                              $fertig = $added ? preg_replace('!(&lt;\?php)(.*?)(\&gt;\> )!si', '\\2', $array_contents[0]) : $array_contents[0];
                              $final.= '<br><table width="80%" class="text" align="center" cellpadding="2" cellspacing="0">';
                              $final.= '<tr><td><b>PHP Code:</b></td></tr><tr><td bgcolor="#ffffff">'.$fertig.'</td></tr>';
                              $final.= '</table><br>'.$array_contents[1];
                          }
                          return $final;
                      }
                      So. Du siehst ja wo das echo steht. Schau ich dann in den Quelltext, stehen da eindeutig die Sachen, die eigentlich von Abraxax Zeile hätten ersetzt werden sollen.
                      :\

                      Kommentar

                      Lädt...
                      X