Приветствую!
Есть задача сделать подсветку РНР-кода в тексте.
Вот допустим пример:
Test message
$text = "
echo $ttt;
if ($a = 1) {
$ret = \'rrr\';
}
?>";
$text = str_replace("\\$","\\\\$",$text);
highlight_string($text);
?>
tetsts
Как мне перед знаком $ подставить \\, а то получается, что он название переменной просто игнорирует.
из vb:
/admin/functions.php
// ###################### Start bbcodeparse #######################
function bbcodeparse($bbcode,$forumid=0,$allowsmilie=1) {
global $allowhtml,$allowbbcode,$allowbbimagecode,$allowsmilies;
if ($forumid == 0)
{
$dohtml=$allowhtml;
$dobbcode=$allowbbcode;
$dobbimagecode=$allowbbimagecode;
$dosmilies=$allowsmilies;
}
else
{
$forum=getforuminfo($forumid);
$dohtml=$forum[allowhtml];
$dobbimagecode=$forum[allowimages];
$dosmilies=$forum[allowsmilies];
if ($allowsmilie!=1) {
$dosmilies = $allowsmilie;
}
$dobbcode=$forum[allowbbcode];
}
return bbcodeparse2($bbcode,$dohtml,$dobbimagecode,$dosmilies,$dobbcode);
}
function bbcodeparse2($bbcode,$dohtml,$dobbimagecode,$dosmilies,$dobbcode)
{ // parses text for vB code, smilies and censoring
global $DB_site,$wordwrap,$allowdynimg, $bbuserinfo;
static $smilies,$bbcodes;
global $regexcreated,$searcharray,$replacearray,$phpversionnum;
if($wordwrap!=0) {
$bbcode=dowordwrap($bbcode);
}
if(!$dohtml) { // kill any rogue html code
// $bbcode=str_replace("&","&",$bbcode);
$bbcode=str_replace("<","<",$bbcode);
$bbcode=str_replace(">",">",$bbcode);
$bbcode=str_replace("<","<",$bbcode);
$bbcode=str_replace(">",">",$bbcode);
}
$bbcode=nl2br($bbcode);
//smilies
if($dosmilies) {
$bbcode=str_replace(">)", "> )", $bbcode);
$bbcode=str_replace("<)", "< )", $bbcode);
if(!isset($smilies)) {
$smilies=$DB_site->query("SELECT smilietext,smiliepath FROM smilie");
} else {
$DB_site->data_seek(0,$smilies);
}
while ($smilie=$DB_site->fetch_array($smilies)) {
if(trim($smilie[smilietext])!="") {
$bbcode=str_replace(trim($smilie[smilietext]),"",$bbcode);
}
}
}
if($dobbcode and strpos($bbcode,"]")) {
if (!isset($regexcreated)) {
$regexcreated = 1;
$phpversionnum = phpversion();
if (floor($phpversionnum) < 4) {
$searcharray = array(
"/(\\[)(list)(=)([\'\\"]?)([^\\"\']*)(\\\\4])(.*)(\\[\\/list)(((=)(\\\\4)([^\\"\']*)(\\\\4]))|(\\]))/siU",
"/(\\[)(list)(])(.*)(\\[\\/list\\])/siU",
"/(\\[\\*\\])/siU",
"/(\\[)(url)(=)([\'\\"]?)(www\\.)([^\\"\']*)(\\\\4)(.*)(\\[\\/url\\])/siU",
"/(\\[)(url)(=)([\'\\"]?)([^\\"\']*)(\\\\4])(.*)(\\[\\/url\\])/siU",
"/(\\[)(url)(])(www\\.)([^\\"]*)(\\[\\/url\\])/siU",
"/(\\[)(url)(])([^\\"]*)(\\[\\/url\\])/siU",
"/(\\[)(php)(])(\\r\\n)*(.*)(\\[\\/php\\])/siU",
"/(\\[)(code)(])(\\r\\n)*(.*)(\\[\\/code\\])/siU",
"/javascript:/si",
"/about:/si",
"/vbscript:/si"
);
$replacearray = array(
"\\\\7
",
"",
"",
"\\\\8",
"\\\\7",
"\\\\5",
"\\\\4",
"code:
\\\\5
",
"code:
\\\\5
",
"java script:",
"about :",
"vbscript :"
);
} else {
$searcharray = array(
"/(\\[)(list)(=)([\'\\"]?)([^\\"\']*)(\\\\4])(.*)(\\[\\/list)(((=)(\\\\4)([^\\"\']*)(\\\\4]))|(\\]))/esiU",
"/(\\[)(list)(])(.*)(\\[\\/list\\])/esiU",
"/(\\[)(url)(=)([\'\\"]?)([^\\"\']*)(\\\\4])(.*)(\\[\\/url\\])/esiU",
"/(\\[)(url)(])([^\\"]*)(\\[\\/url\\])/esiU",
"/(\\[)(code)(])(\\r\\n)*(.*)(\\[\\/code\\])/esiU",
"/(\\[)(php)(])(\\r\\n)*(.*)(\\[\\/php\\])/esiU",
"/javascript:/si",
"/about:/si",
"/vbscript:/si"
);
$replacearray = array(
"createlists(\'\\\\7\', \'\\\\5\')",
"createlists(\'\\\\4\')",
"checkurl(\'\\\\5\', \'\\\\7\')",
"checkurl(\'\\\\4\')",
"stripbrsfromcode(\'\\\\5\')",
"phphighlite(\'\\\\5\')",
"java script:",
"about :",
"vbscript :"
);
} // end version check
$doubleRegex = "/(\\[)(%s)(=)([\'\\"]?)([^\\"\']*)(\\\\4])(.*)(\\[\\/%s\\])/siU";
$singleRegex = "/(\\[)(%s)(])(.*)(\\[\\/%s\\])/siU";
$bbcodes=$DB_site->query("SELECT bbcodetag,bbcodereplacement,twoparams FROM bbcode");
while($bbregex=$DB_site->fetch_array($bbcodes)) {
if ($bbregex[twoparams]) {
$regex=sprintf($doubleRegex, $bbregex[bbcodetag], $bbregex[bbcodetag]);
} else {
$regex=sprintf($singleRegex, $bbregex[bbcodetag], $bbregex[bbcodetag]);
}
$searcharray[] = $regex;
$replacearray[] = $bbregex[bbcodereplacement];
// and get nested ones:
$searcharray[] = $regex;
$replacearray[] = $bbregex[bbcodereplacement];
$searcharray[] = $regex;
$replacearray[] = $bbregex[bbcodereplacement];
}
}
if ($phpversionnum<"4.0.5") {
$bbcode=str_replace("\'", "\\\'", $bbcode);
}
$bbcode=preg_replace($searcharray, $replacearray, $bbcode);
if($dobbimagecode and ($bbuserinfo[userid]==0 or $bbuserinfo[showimages])) {
// do [img]xxx[/img]
$bbcode = preg_replace("/\\[img\\](\\r\\n|\\r|\\n)*((http|https):\\/\\/([^;<>\\*\\(\\)\\"".iif($allowdynimg,"","\\?\\&")."]+)|[a-z0-9\\/\\\\\\._\\- ]+)\\[\\/img\\]/siU", "", $bbcode);
}
$bbcode = preg_replace("/\\[img\\](\\r\\n|\\r|\\n)*((http|https):\\/\\/([^;<>\\*\\(\\)\\"]+)|[a-z0-9\\/\\\\\\._\\- ]+)\\[\\/img\\]/siU", "\\\\2", $bbcode);
$bbcode=str_replace("\\\\\'", "\'", $bbcode);
if (floor($phpversionnum) < 4) {
// get rid of stray
tags in the code - upsets older browsers (IE 4.72 reported problems)
$codebits=explode("code:
",$bbcode);
list($key,$bbcode)=each($codebits);
while (list($key,$val)=each($codebits)) {
$sbbits=explode("
",$val);
$newbits=str_replace("
", "", $sbbits[0])."
".$sbbits[1];
$bbcode.="code:
".$newbits;
}
}
}
$bbcode=str_replace("{", "{", $bbcode); // stop people posting replacements in their posts
return censortext($bbcode);
}