我试图使用heredoc语法来分隔字符串,而不对引号进行任何特殊处理,如下所示。似乎heredoc函数干扰了bbcode函数解析代码的能力,因为我收到此错误通知:注意:未定义的变量:tag,当我在浏览器中查看代码输出时。我需要线索来解决这个问题。
感谢。
function phpbbcode($s)
{
$s = str_replace("]\n", "]", $s);
$match = array('#\[php\](.*?)\[\/php\]#se');
$replace = array("'<div>'.highlight_string(stripslashes('$1'), true).'</div>'");
return preg_replace($match, $replace, $s);
}
// apply bbcode to highlight string
$s = <<< parser
[php]
<?php
while(strpos($tag, \' =\') > 0) $tag = str_replace(\' =\', \'=\', $tag);
while(strpos($tag, \'= \') > 0) $tag = str_replace(\'= \', \'=\', $tag);
while(strpos($tag, \', \') > 0) $tag = str_replace(\', \', \',\', $tag);
while(strpos($tag, " ,") > 0) $tag = str_replace(\' ,\', \',\', $tag);
?>
[/php]
parser;
echo phpbbcode($s);
答案 0 :(得分:0)
变量在heredoc中扩展。如果您不想扩展变量,则应使用nowdoc。这就像一个heredoc,但你把标识符放在单引号中:
$s = <<< 'parser'
[php]
<?php
while(strpos($tag, \' =\') > 0) $tag = str_replace(\' =\', \'=\', $tag);
while(strpos($tag, \'= \') > 0) $tag = str_replace(\'= \', \'=\', $tag);
while(strpos($tag, \', \') > 0) $tag = str_replace(\', \', \',\', $tag);
while(strpos($tag, " ,") > 0) $tag = str_replace(\' ,\', \',\', $tag);
?>
[/php]
parser;