أفضّل استخدام preg_replace_callback في هذه الحالة
هذا كود معتمد فيه على كود مقتبس من اكواد vB
كود PHP:
<?
$code = '[php1] $word = "php";[/php1]';
$code = preg_replace_callback('/\[php1\](.*)\[\/php1\]/siU','_handlePHPCODE',$code);
echo $code;
function _handlePHPCODE($matches)
{
static $codefind1, $codereplace1, $codefind2, $codereplace2;
$code = $matches[1];
if (!is_array($codefind1))
{
$codefind1 = array(
'<br>', // <br> to nothing
'<br />' // <br /> to nothing
);
$codereplace1 = array(
'',
''
);
$codefind2 = array(
'>', // > to >
'<', // < to <
'"', // " to ",
'&', // & to &
'[', // [ to [
']', // ] to ]
);
$codereplace2 = array(
'>',
'<',
'"',
'&',
'[',
']',
);
}
// remove htmlspecialchars'd bits and excess spacing
$code = rtrim(str_replace($codefind1, $codereplace1, $code));
//$blockheight = $this->fetch_block_height($code); // fetch height of block element
$code = str_replace($codefind2, $codereplace2, $code); // finish replacements
// do we have an opening <? tag?
if (!preg_match('#<\?#si', $code))
{
// if not, replace leading newlines and stuff in a <?php tag and a closing tag at the end
$code = "<?php BEGIN__VBULLETIN__CODE__SNIPPET $code \r\nEND__VBULLETIN__CODE__SNIPPET ?>";
$addedtags = true;
}
else
{
$addedtags = false;
}
// highlight the string
$oldlevel = error_reporting(0);
$code = highlight_string($code, true);
error_reporting($oldlevel);
// if we added tags above, now get rid of them from the resulting string
if ($addedtags)
{
$search = array(
'#<\?php( | )BEGIN__VBULLETIN__CODE__SNIPPET( | )#siU',
'#(<(span|font)[^>]*>)<\?(</\\2>(<\\2[^>]*>))php( | )BEGIN__VBULLETIN__CODE__SNIPPET( | )#siU',
'#END__VBULLETIN__CODE__SNIPPET( | )\?(>|>)#siU'
);
$replace = array(
'',
'\\4',
''
);
$code = preg_replace($search, $replace, $code);
}
$code = preg_replace('/&#([0-9]+);/', '&#$1;', $code); // allow unicode entities back through
$code = str_replace(array('[', ']'), array('[', ']'), $code);
return $code;
}
انا ضد فكرة الاقتباس لكن هذا يعطيك فكرة ان كنت مصّر على استخدام highlight_string
او ابحث في قوقل عن GeSHI.