php Codesnipsel mit Syntaxhighlight UND htmlcode anzeigen

mrepox

Erfahrenes Mitglied
Hallo,

ich habe eben festgestellt, das in meinem selbstgeschriebenen pastebin, geposteter HTML Code ausgeführt wird.
Das darf natürlich nicht sein und ließe sich durch sowas hier auch vermeiden:

PHP:
$html= "<b>ich bin fett gedruckt</b>";
$html_first = str_replace("<","&lt;",$html);
$html_second= str_replace(">","&gt;",$html_first);
echo $html_second;

Die Lage ist aber eine andere wenn in meinem pastebin "Syntaxhighlighting" für den Text gewählt wurde.
Dann wird die Syntax-Formatierung(die farbige) auch nicht mehr ausgeführt und mit angezeigt.

Wie kann man damit umgehen, gibts da Lösungsvorschläge? Habe Tante Google bemüht und nichts gefunden, außer das andere pastebins auch html ausführen oder wenn nicht kein Syntaxhighlighting haben.
Wie ist das denn in diesem Forum gelöst?


Gruß Markus
 
der 2.te Link bietet dir doch nen kompletten synatx highlighter...Wenn du da noch '<' durch '&gt;' usw im Quellcode änderst, dann hast du dein Lösung!
 
Geht auch einfacher :)

PHP:
<?php

$text = "<b>ich bin fett gedruckt</b>"; 

echo highlight_string(htmlentities($text, ENT_QUOTES));

?>
 
@KD3

und was soll ich mit dieser Ausgabe?

HTML:
&lt;b&gt;ich bin fett gedruckt&lt;/b&gt;

Wenn ich das wieder zurück codiere, bin ich doch genauso weit wie vorher.

EDIT: Sorry, ohne highlight_string() geht es, mit highlight_string wird alles in unicode (so heiß es doch?) angezeigt.
kann ich auch leider nicht zurückwandeln.
Es ist mir im moment auch nicht ganz klar wie es überhaupt klappen soll.
Wenn htmlentities() greift,woher kann dann highlight_string dann noch erkennen was htmlcode ist?


Was haltet ihr davon die Ausgabe von htmlentities() zu puffern und anschließend durch highlight_string() zu schicken um sie dann auszugeben?

EDIT:

Habe mal einen Versuch unternommen, leider wieder erfolglos:
PHP:
<?php
$text = "<?php echo 'test'; echo '<p>ein Test</p>?><h1>test</h1>';"; 

$html = htmlentities($text);

    ob_start ();
 
        echo $html;

            $str = ob_get_contents ();

        ob_end_clean ();

    highlight_string($str);

?>
Ausgabe:
HTML:
&lt;?php echo 'test'; echo '&lt;p&gt;adlkdjkjkjadskkk&lt;/p&gt;?&gt;&lt;h1&gt;test&lt;/h1&gt;';

Nun bin ich mit meinem Latein am Ende.


Gruß Markus
 
Zuletzt bearbeitet:
Habe grade das hier im man für highlight_string() gefunden:
HTML:
Hinweis: This function internally uses the output buffering with this parameter so it can not be used inside ob_start() callback function.

Somit ist die Idee wieder hinfällig. Kann mir niemand eine weitere Lösung anbieten?

Gruß Markus
 
So wie es ausschaut, funktioniert dein pastebin so, dass du die Highlightformatieren bereits beim Eintragen in die Datenbank hinzufügst.
Nun hast du die Wahl, ob du eben genau das änderst, sprich erst beim Auslesen hinzufügst. Das würde dir den Vorteil geben, jederzeit die Highlight Routine ändern zu können und nicht manuell oder sonstwie die alten Einträge anfassen zu müssen.

Die andere Möglichkeit wäre VOR dem Anwenden der Highlighting Logik [phpf]htmlspecialchars[/phpf] drüber laufen zu lassen.

Für die Problematik mit den alten Einträgen, wirst du dir eigentlich nur manuell behelfen können.

Allerdings versteh ich nicht 100%ig die Problematik, da [phpf]highlight_string[/phpf] ja bereits HTMTL ersetzt. Wie genau kann man in dein Pastebin HTML Code einfügen?
 
Zurück