0

通常,人们会认为意外的 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

$lay 包含

$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']

这是否意味着该错误实际上是在 $lay 中还是我错过了其他东西?这种级别的字符串替换甚至可能吗?

4

2 回答 2

2

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

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

$lay用单引号将变量括起来。现在让我们看看这个变量的内容:

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

看到问题了吗?您也在值中使用单引号。交换 eval 语句中的引号,这样就不再有冲突:

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

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

于 2012-04-28T01:50:09.043 回答
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);
于 2012-04-28T01:52:08.070 回答