BBCode für Code ( wie hier im Forum )

GalaxyWarrior

Erfahrenes Mitglied
So, da ich noch mehr Fragen habe, habe ich nun mal nen eigenen Thread gemacht.
Also, ich habe aus einem Thread von gestern/heute einen BBCode Script genommen, und wollte diesen um den BBCode [ PHP ] erweitern. Ich habe es mit der Zeile
PHP:
		$neuertext = preg_replace("/\[PHP\](.*)\[\/PHP\]/isU", "<table border='1' cellspacing='0' cellpadding='2' bgcolor='EFEFEF' width='95%' align='center'><tr><td>	<div class='alt2' style='margin:0px; padding:3px; border:1px inset; width:500px; height:370px; overflow:scroll'>  <i><p class=text>PHP-Code:</p></i><br><br>highlight_string($1)</div></td></tr></table>", $neuertext);
Versucht, doch leider wird dadurch der Code nicht gehighlightet. Auch
PHP:
		$neuertext = preg_replace("/\[PHP\](.*)\[\/PHP\]/isU", "<table border='1' cellspacing='0' cellpadding='2' bgcolor='EFEFEF' width='95%' align='center'><tr><td>	<div class='alt2' style='margin:0px; padding:3px; border:1px inset; width:500px; height:370px; overflow:scroll'>  <i><p class=text>PHP-Code:</p></i><br><br>".highlight_string($1)."</div></td></tr></table>", $neuertext);

Klappt nicht. Es kommt ein Fehler

Code:
$neuertext = preg_replace("/\[PHP\](.*)\[\/PHP\]/isU", "<table border='1' cellspacing='0' cellpadding='2' bgcolor='EFEFEF' width='95%' align='center'><tr><td>	<div class='alt2' style='margin:0px; padding:3px; border:1px inset; width:500px; height:370px; overflow:scroll'>  <i><p class=text>PHP-Code:</p></i><br><br>highlight_string($1)</div></td></tr></table>", $neuertext);

Außerdem wird der Tet am ende des Div's umgebrochen. Das macht den Code aber sehr unübersichtlich. Ich wollte es so haben wie hier, dass man den Code dann nach rechts scrollt. Ich habe es auch mit
Code:
overflow:auto;
versucht, aber brachte auch nichts.

Gruß GalaxyWarrior
 
Das ergibt
Code:
Fatal error: preg_replace() [function.preg-replace]: Failed evaluating code: [....]

Was sollte das denn machen?

Gruß GalaxyWarrior
 
Bitte missbrauche keine Tabellen um Quellcode auszuzeichnen. Verwende stattdessen das pre-Element für präformatierte Inhalte, beispielsweise:
PHP:
<?php

	function highlight_php($data)
	{
		$data = preg_replace('/^(?:\x0A|\x0D\x0A|\x0D|\x0C)+|(?:\x0A|\x0D\x0A|\x0D|\x0C)+$/', '', $data);
		return '<pre class="php">'.highlight_string($data, true).'</pre>';
	}

	$string = preg_replace('/\[php\](.+?)\[\/php\]/ise', 'highlight_php("\\1")', $string);

?>
Diese kannst du anschließend immer noch formatieren.
 
So wie du geschrieben hast Gumbo, gehts nicht, dann wird
Code:
Fatal error: preg_replace() [function.preg-replace]: Failed evaluating code:
angezeigt. Hat noch jemand ne andere Idee?
 
Zuletzt bearbeitet:
Vielleicht hilft Dir ja weiter was ich in diesem Thread mal hinterlassen habe.
Ich sollte den Thread mal bookmarken, der ist jetzt fast ein halbes Jahr alt und es wird immer schwerer den wieder zu finden. ;)
Aber er ist immer wieder praktisch. :)
 
Nein, leider nicht. denn die beschriebenen Tags gehen ja, nur mit dem PHP Tag habe ich Probleme, da er in dem Zusammenhang die Funktion highlight_string() nicht richtig verarbeitet
 
Hab noch en bissel gebastelt, und nun sieht die Zeile zum ersetzen so aus:

PHP:
$neuertext = preg_replace('/\[php\](.+?)\[\/php\]/isU', $this->highlight_php('\\1'), $neuertext);

Mit der Highlight_php() von Gumbo. Allerdings wird dann nur eine 1 ausgegeben. Ne rote 1 is ja auch ganz net :-)

Außerdem ist immernoch die Frage offen, wie ich Vertikal scrollen kann, denn im moment wird der Text automatisch umgebrochen.

Gruß GalaxyWarrior
 
Tut mir leid, GalaxyWarrior, ich kann deinen Fehler nicht nachvollziehen, bei mir funktioniert es einwandfrei.
 
Zurück