preg_replace и highlight_string

Styl3rbg

Registered
Здравейте,

опитвам се да направя ББкод, който да оцветява PHP кода, но без успех..
Ето ми го preg_replace
Код:
$article = preg_replace('/\[php\](.*?)\[\/php\]/', highlightphp('$1'), $article);
(минава през nl2br)

Ето и функцията

PHP:
function highlightphp($code) {
$code = htmlspecialchars_decode($code);
$code = highlight_string($code, true);            
return $code;

А в сайта се показва

Код:
[php] 
$getsbsversion = version();
 if($error != NULL) { echo warning($error); } ?>
 [/php]
 
използвай preg_replace_callback и ще стане

http://php.net/manual/en/function.preg-replace-callback.php

preg_replace не извиква функцията, а просто заменя единия текст с друг.

preg_replace_callback минава мачнатите резултати през callback, в случая това ще е твоята функция за оцветяване, и замества мачнатите резултати с return-a от функцията.
 
PHP:
function highlightphp($code) 
{
$code = htmlspecialchars_decode($code);
$code = highlight_string($code, true);           
 return $code;
}
$article = preg_replace_calback('/\[php\](.*?)\[\/php\]/', highlightphp('$1'), $article);
 
дака нали знаеш, че кода който си му дал е грешен

правилно се прави така

PHP:
function highlightphp($code) 
{
$ret = htmlspecialchars_decode($code[0]);
$ret = highlight_string($ret, true);           
 return $ret;
}
$article = preg_replace_calback('/\[php\](.*?)\[\/php\]/', highlightphp('$1'), $article);

защото preg_replace_callback подава на функцията масив, не стринг.
 
Прибрах се от работа сега и за тва така ! Трябва си масив не съобразих нещата за което се извинявам :)
 
Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, '<code><span style="color: #000000"> $</span> </code>', to be a valid callback in E:\VertrigoServ\www\sbs-includes\sbs-functions.php on line 118
 
PHP:
function highlightphp($code) 
{
$ret = htmlspecialchars_decode($code[0]);
$ret = highlight_string($ret, true);           
 return $ret;
}
$article = preg_replace_calback('/\[php\](.*?)\[\/php\]/', 'highlightphp', $article);

Моя грешка, ето така ще работи. Трябва да подадеш само името на функцията като втори параметър, то ще си я извика и ще и даде съответните параметри.
 
Radko каза:
PHP:
function highlightphp($code) 
{
$ret = htmlspecialchars_decode($code[0]);
$ret = highlight_string($ret, true);           
 return $ret;
}
$article = preg_replace_calback('/\[php\](.*?)\[\/php\]/', 'highlightphp', $article);

Моя грешка, ето така ще работи. Трябва да подадеш само името на функцията като втори параметър, то ще си я извика и ще и даде съответните параметри.
Отново без резултат ето демо: http://penchev-bg.eu/link.php
 
PHP:
<?php
function($code) {
$code=htmlspecialchars_decode(stripslashes($code));				
$code= preg_replace("/\[code\](.+?)\[\/code\]/is", "$1", $code);
$code= highlight_string($code, true);
echo $code;
}
?>
 
kikity_94 каза:
PHP:
<?php
function($code) {
$code=htmlspecialchars_decode(stripslashes($code));				
$code= preg_replace("/\[code\](.+?)\[\/code\]/is", "$1", $code);
$code= highlight_string($code, true);
echo $code;
}
?>
Така е ОК, но пък отново не иска да оцвети кода..
 
Какво ти показва дай малко информация така без да знам какво ти излиза не мога да ти помогна
 
kikity_94 каза:
Какво ти показва дай малко информация така без да знам какво ти излиза не мога да ти помогна
По-горе дадох демо -> http://penchev-bg.eu/link.php
 
Еми, ако го минеш първо през htmlspecialchars, че след това функцията ти да направи decode по- било станало.
 
TryMe каза:
Еми, ако го минеш първо през htmlspecialchars, че след това функцията ти да направи decode по- било станало.
Ами ето, но без резултат http://penchev-bg.eu/link.php

PHP:
<?php
function code($code) {
$code=htmlspecialchars_decode(htmlspecialchars($code));                             
$code= preg_replace("/\[php\](.+?)\[\/php\]/is", "$1", $code);
$code= highlight_string($code, true);
echo $code;
}
$article = file_get_contents("phpcode.php");
$article = code($article);
echo "<code>".$article."</code>";
?>
 
Първо функция preg_replace_calback няма, има функция preg_replace_callback, второ функцията, която ще борави с намерените съвпадения не се записва по начина, който са дали потребителите по-горе(лично на тях съм показвал ама май са позабравили или не са обърнали достатъчно внимание), трето към авотра на темата highlight_string генерира хмтл тагове <code></code> така че не е нужно ти да ги слагаш и също трябва в стринга който подаваш да има отварящ таг <?php за да работи, а аз лично в демото не видях такъв.

function highlightphp($code) {
$code = htmlspecialchars_decode($code[1]);
return $code = highlight_string($code, true);
}

$article = '<div>blabla</div>
PHP:
<?php echo $variable; ?>
blabla';
$article = htmlspecialchars($article);
echo preg_replace_callback('/\
PHP:
(.+?)\[\/php]/', 'highlightphp', $article);

Edit:Сега видях, че Radko е успял да извика функцията highlightphp  правилно в посления си пост.
 

Back
Горе