我意想不到的T_STRING在哪里?

时间:2012-04-28 01:26:44

标签: php eval

通常,人们会发现意外的T_STRING意味着缺少分号。但是,在这种情况下,分号中缺少分号

        global $lay;
        $yal = eval("return '$lay';");
        echo $yal . "\n";

错误在eval中抛出,即

Parse error: syntax error, unexpected T_STRING in ... BOGARIP.php(140) : eval()'d code on line 1
含有

$reportDate\t$heads['Account']\t$id\t$heads['Time zone']\t$heads['Campaign']\t$heads['Ad group']\t$heads['Network']\t$heads['Network (with search partners)']\t\t$heads['Ad group state']\t$heads['Campaign state']\t$heads['Impressions']\t$heads['Clicks']\t$heads['CTR']\t$heads['Avg. CPC']\t$heads['Avg. CPM']\t$heads['Cost']\t$heads['Avg. position']

这是否意味着该bug实际上是在$ lay或我错过了其他什么?这种字符串替换级别是否可能?

2 个答案:

答案 0 :(得分:2)

一般来说,你真的不应该对eval做任何事情。但是,为了解决技术问题,请考虑以下因素:

eval("return '$lay';");

您使用单引号围绕$lay变量。现在让我们看一下这个变量的内容:

$reportDate\t$heads['Account...

看到问题?你也在值中使用单引号。在eval语句中交换引号,以便不再发生冲突:

eval('return "$lay";');

再次请不要使用此代码。总的来说,专业人员会引导您远离每一个使用eval的人,因为它会为您的应用程序带来很多潜在的困境。请找到另一种方法来做你正在尝试的任何事情。

答案 1 :(得分:1)

接受了@Evert的建议并进行了重构。现在格式包含

%DATE%\t%Account%\t%ID%\t%Time zone%\t%Campaign%\t%Ad group%\t%Network%\t%Network (with search partners)%\t\t%Ad group state%\t%Campaign state%\t%Impressions%\t%Clicks%\t%CTR%\t%Avg. CPC%\t%Avg. CPM%\t%Cost%\t%Avg. position%

和代码

    $heads["ID"] = $id;
    $heads["DATE"] = $reportDate;

...

    global $lay;
    $layout = $lay;
    foreach ($heads as $key => $value) {
        $layout = str_replace("%" . $key . "%", $value, $layout);
    }
    $layout = str_replace("\\n", "\n", $layout);
    $layout = str_replace("\\t", "\t", $layout);