Highlight im BBCodefunktion einbinden

Hi

danke Gumbo aller dings brauch ich die syntax für C habs nur so für zum probieren für php gemacht.

deshalb hilft highlight_string() nix.

kannst du mit bitte zeigen wie es mit Geshi geht?

Habe echt net viel Ahnung von php.

mfg klo
 
Zuletzt bearbeitet:
Prinzipiell kannst du Marvins und meinen Vorschlag einfach kombinieren, etwa:
PHP:
<?php

	include_once 'geshi.php';


	function highlightString( $string, $language )
	{

		if( !empty($language) ) {
			$geshi =& new GeSHi($string, $language);
			$return = '<code class="'.$language.'">'.$geshi->parse_code().'</code>';
		} else {
			$return = '<code>'.htmlspecialchars($string).'</code>';
		}
		return '<pre>'.$return.'</pre>';

	}


	preg_replace('<\[blockcode(?::([^\x5D]+))?\]((?s).*?)\[/blockcode\]>ei', '"<pre>".highlightString("\2", "\1")."</pre>"', $string);

?>
Die Syntax hierbei wäre [blockcode:foobar] … [/blockcode].
 
Hi

der code gibt einen error ab!

der kommt net ganz mit Geshi klar.
Fatal error: Can't use method return value in write context in C:\Programme\xampp\htdocs\c-world\test\echo.php on line 19

das ist die Zeile "if( !empty($geshi->error()) ) {"

noch was ich habe den ausdruck jetzt umgeschrieben.
Code:
preg_replace('<\[ C\]((?s).*?)\[ /C\]>ei', '"<pre>".highlightString("\2", "\1")."</pre>"', $string);

kann es sein das er jetzt bei
Code:
[ C] [ /C]
anspricht?

und wozu ist das "\2","\1" bei deiner funktion wo wird da die $language übergegen?

mfg klo
 
Prinzipiell kannst du Marvins und meinen Vorschlag einfach kombinieren, etwa:
PHP:
<?php

	include_once 'geshi.php';


	function highlightString( $string, $language )
	{

		if( !empty($language) ) {
			$geshi =& new GeSHi($string, $language);
			$return = '<code class="'.$language.'">'.$geshi->parse_code().'</code>';
		} else {
			$return = '<code>'.htmlspecialchars($string).'</code>';
		}
		return '<pre>'.$return.'</pre>';

	}


	preg_replace('<\[blockcode(?::([^\x5D]+))?\]((?s).*?)\[/blockcode\]>ei', '"<pre>".highlightString("\2", "\1")."</pre>"', $string);

?>
Die Syntax hierbei wäre [blockcode:foobar] … [/blockcode].
 
Versuch's mit:
PHP:
$string = preg_replace('<\[blockcode(?::([^\x5D]+))?\]((?s).*?)\[/blockcode\]>ei', '"<pre>".highlightString("\2", "\1")."</pre>"', $string);

echo $string;
 
Hi

ne leider da rührt sich bei mir nix hat es bei dir geklappt?

es wäre schön wenn mir einer erklärt woher die funktion die sprache weiß bzw und woher sie den string bekommt denn da steht nur was von /1 udn /2.


würde mir wirklich sehr weiterhelfen wenn ihr mir das sagen könntet und vieleicht mein problem lösen könntet den allein schaffe ich das nicht.

mfg klo
 
Ich hab’s jetzt mal selbst ausprobiert. Bei mir funktioniert es einwandfrei. Habe es nun noch etwas angepasst:
PHP:
<?php

	require_once 'geshi.php';

	function highlightString( $string, $language )
	{

		if( !empty($language) ) {
			$geshi =& new GeSHi($string, $language);
			if( $geshi->error() === false ) {
				$return = '<code class="'.$language.'">'.preg_replace('/<pre[^>]*>(.*?)<\/pre>/s', '\1', $geshi->parse_code()).'</code>';
			} else {
				$return = '[blockcode:'.$language.']'.$string.'[/blockcode]';
			} 
		} else {
			$return = '<code>'.htmlspecialchars($string).'</code>';
		}
		return '<pre>'.$return.'</pre>';

	}


	$string = '[blockcode:php]<?php echo "Hello World!"; ?>[/blockcode] [blockcode:foobar]foobar[/blockcode]';
	echo preg_replace('<\[blockcode(?::([^\x5D]+))?\]((?s).*?)\[/blockcode\]>ei', 'highlightString("\2", "\1")', $string);

?>
Wie bereits erwähnt, lautet die Syntax [blockcode:foobar] … [/blockcode], wobei „foobar“ die Sprache darstellt. Wird eine Sprache nicht erkannt, wird der Tag nicht ersetzt. Diese Angabe der Sprache ist zudem noch (zusammen mit dem Doppelpunkt) optional, sodass auch [blockcode] … [/blockcode] funktioniert.
 
Hallo!

Und wie sieht es hiermit aus?
PHP:
<?php
if(isset($_POST['show_src'])) {
     include('geshi.php');
     $source = stripslashes($_POST['src']);
     $language = 'php';
     $path = 'geshi/';
     $geshi = new GeSHi($source, $language, $path);
     echo $geshi->parse_code()."\n";
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
     <textarea cols="50" rows="10" name="src"></textarea>
     <br>
     <input type="submit" name="show_src" value="Highlight">
</form>
Das Ergebnis ist zwar ein anderes, erfüllt aber wohl auch seinen Zweck.

Gruss Dr Dau

[edit]
Ach nee, er wollte den Code ja in [ code ][ /code] stehen haben?!
[/edit]
 
Hi


ich danke euch es geht.

eine frage hätte ich noch wo muss ich was hinmachen damit ich es auch in einem so einem schönen grauen Fenster habe wie hier im Board?


mfg klo
 
Zuletzt bearbeitet:
Zurück