Code highlighting via preg_replace (Opgelost)
tomie94 - 02/02/2008 12:56
PHP interesse
Hallo,
Ik ben bezig met mijn forum en nu zit ik met een probleem...
ik wil graag code tags hebben. nu zit ik vast want ik gebruik preg_replace en de code wil ik highlighting met de php functie highlight. nu is mijn vraag hoe kan ik de functie gebruiken via preg_replace
7 antwoorden
Gesponsorde links
Koen - 02/02/2008 13:09
PHP expert
$code = preg_replace("#\[php\](.*?)\[php\]#si", "\\1", $string);
$code = highlight_string($code);
$code = preg_replace ( "#\[php\](.*?)\[php\]#si" , "\\1 " , $string ) ;
Zo?
tomie94 - 02/02/2008 13:15 (laatste wijziging 03/02/2008 10:14)
PHP interesse
nee... helaas... ik probeer het nu even zo:
$text = preg_replace("#\[code=php\](.*?)\[/code\]#si", "".$geshi =& new GeSHi('\\1', 'php')."".$geshi->parse_code()."", $text);
$text = preg_replace ( "#\[code=php\](.*?)\[/code\]#si" , "" . $geshi =& new GeSHi
( '\\1' , 'php' ) . "" . $geshi -> parse_code ( ) . "" , $text ) ;
maae dit werkt helaas ook niet...
[error]
Catchable fatal error: Object of class GeSHi could not be converted to string in C:\wamp\www\v2\class.inc.php on line 11
[/error]
edit:
dit werkt ook niet:
include_once('geshi/geshi.php');
function php_kleuren($phpcode) {
$geshi =& new GeSHi($phpcode, 'php');
echo $geshi->parse_code();
}
$text = preg_replace ("#\[php\](.*?)\[/php\]#si", ''.php_kleuren("\\1").'', $text);
include_once ( 'geshi/geshi.php' ) ;
function php_kleuren( $phpcode ) {
$geshi =& new GeSHi( $phpcode , 'php' ) ;
echo $geshi -> parse_code ( ) ;
}
$text = preg_replace ( "#\[php\](.*?)\[/php\]#si" , '' . php_kleuren
( "\\1 " ) . '' , $text ) ;
2e edit:
dit werkt:
<?php
include_once('geshi/geshi.php');
function php_kleuren($phpcode) {
$geshi =& new GeSHi($phpcode, 'php');
echo $geshi->parse_code();
}
$php = preg_replace ("#\[php\](.*?)\[/php\]#si", ''"\\1".'', $text);
$php = php_kleuren($php);
$text = preg_replace ("#\[php\](.*?)\[/php\]#si", $php, $text);
?>
<?php
include_once ( 'geshi/geshi.php' ) ;
function php_kleuren( $phpcode ) {
$geshi =& new GeSHi( $phpcode , 'php' ) ;
echo $geshi -> parse_code ( ) ;
}
$php = preg_replace ( "#\[php\](.*?)\[/php\]#si" , '' "\\1 " . '' , $text ) ; $php = php_kleuren( $php ) ;
$text = preg_replace ( "#\[php\](.*?)\[/php\]#si" , $php , $text ) ; ?>
maar nu staat alle tekst in de code, en ik kan niet meerder keren een code toevoegen
Edit: Kleine verandering in code hierboven. maar hij werkt nogsteeds nuet...
timmie_loots - 03/02/2008 17:26
PHP gevorderde
<?php
include_once "geshi/geshi.php";
$nieuwe_tekst = preg_replace_callback("/\[php\](.*?)\[\/php\]/si", create_function('$matches', "\$geshi = new GeSHi(\$matches[1], 'php'); return \$geshi->parse_code();", $originele_tekst);
?>
<?php
include_once "geshi/geshi.php" ;
$nieuwe_tekst = preg_replace_callback ( "/\[php\](.*?)\[\/php\]/si" , create_function ( '$matches' , "\$ geshi = new GeSHi(\$ matches[1], 'php'); return \$ geshi->parse_code();" , $originele_tekst ) ;
?>
Zoiets.
tomie94 - 03/02/2008 17:34
PHP interesse
dan krijg ik hellaas een error:
Warning: Wrong parameter count for create_function() in C:\wamp\www\v2\class.inc.php on line 18
Warning: Wrong parameter count for preg_replace_callback() in C:\wamp\www\v2\class.inc.php on line 18
code:
$text = preg_replace_callback("/\[php\](.*?)\[\/php\]/si",
create_function($matches, "
\$geshi = new GeSHi(\$matches[1], 'php');echo \$geshi->parse_code();", $text));
\$ geshi = new GeSHi(\$ matches[1], 'php');echo \$ geshi->parse_code();" , $text ) ) ;
Bart - 03/02/2008 17:37
PHP expert
Zoek nou eens zelf wat uit tomie94, dit begint me behoorlijk te irriteren aan jou. Je vraagt alles maar, je blijft aan de gang met vragen stellen, en weet je waarom? Omdat je niets leert doordat je alles vraagt.
Kijk op php.net naar deze functies; create_function , preg_replace_callback(). Daar laten ze zien hoe de functies werken en hoeveel parameters een functie minimaal nodig heeft. En natuurlijk Google, die jij nooit raadpleegd, of sorry, jij krijgt nooit resultaten bij Google he, helemaal vergeten.
tomie94 - 03/02/2008 17:46
PHP interesse
het is me gelukt:
function ubb($text) {
function highlight( $matches )
{
$code = stripslashes( $matches[1] );
$geshi =& new GeSHi($code, 'php');
echo $geshi->parse_code();
}
$text = preg_replace("#\[b\](.*?)\[/b\]#si", "<b>\\1</b>", $text);
$text = preg_replace("#\[i\](.*?)\[/i\]#si", "<i>\\1</i>", $text);
$text = preg_replace("#\[u\](.*?)\[/u\]#si", "<u>\\1</u>", $text);
$text = preg_replace("#\[color=(.*?)\](.*?)\[/color\]#si", "
<font color='\\1'>\\2</font>", $text);
$text = preg_replace("#\[small\](.*?)\[/small\]#si", "<small>\\1</small>", $text);
$text = preg_replace("#\[url=(.*?)\](.*?)\[/url\]#si", "<a href='\\1'>\\2</a>", $text);
$text = preg_replace("#\[url\](.*?)\[/url\]#si", "<a href='\\1'>\\1</a>", $text);
$text = preg_replace_callback('!\[php\](.*)\[\/php\]!sUi', 'highlight', $text);
$text = nl2br($text);
echo $text;
}
?>
function ubb( $text ) {
function highlight( $matches )
{
$geshi =& new GeSHi( $code , 'php' ) ;
echo $geshi -> parse_code ( ) ;
}
$text = preg_replace ( "#\[b\](.*?)\[/b\]#si" , "<b>\\1 </b>" , $text ) ; $text = preg_replace ( "#\[i\](.*?)\[/i\]#si" , "<i>\\1 </i>" , $text ) ; $text = preg_replace ( "#\[u\](.*?)\[/u\]#si" , "<u>\\1 </u>" , $text ) ;
$text = preg_replace ( "#\[color=(.*?)\](.*?)\[/color\]#si" , " <font color='\\1 '>\\2 </font>" , $text ) ;
$text = preg_replace ( "#\[small\](.*?)\[/small\]#si" , "<small>\\1 </small>" , $text ) ; $text = preg_replace ( "#\[url=(.*?)\](.*?)\[/url\]#si" , "<a href='\\1 '>\\2 </a>" , $text ) ; $text = preg_replace ( "#\[url\](.*?)\[/url\]#si" , "<a href='\\1 '>\\1 </a>" , $text ) ;
}
?>
timmie_loots - 03/02/2008 17:54
PHP gevorderde
De reden dat 'mijn' scriptje niet werkte is omdat je het niet goed kopiëerde. Je hebt dingen weggehaald omdat je dacht dat het anders moet, maar gewoon kopieëren van het script moet gewoon lukken.
Gesponsorde links
Dit onderwerp is gesloten .