heredoc synthax干扰我的bbcode解析器输出

时间:2014-04-11 00:33:43

标签: php

我试图使用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);

1 个答案:

答案 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;