php eval()中使用heredoc的unexpected $end錯誤
php的Heredoc很好用,無論是在一般的義大利麵式的程式,或在MVC中的view。善用他,可以讓php code和html做較好的分割,讓維護比較容易。也不會破壞原本html排版。
最近,因個特殊案例,使用Heredoc配合eval(),卻遇到了問題。狀況如下…
首先,使用『'』配合eval(),一切正常。如下…
但是,當我想在$str這字串中,放入『"』時
卻得到如下錯誤訊息。原因?這是因為$str中的『"』破壞eval()的字串
利用Heredoc,就不會受到『"』的影響。
不過,卻會得到『unexpected $end』的錯誤訊息。查了一下PHP文件,似乎和缺少<?php 及 ?> 有關。但…以我的應用,應該不是這個問題…
查了很久,看過不少解決方式…最後確認的解決之道……只是,最後多增加一個斷行(\n)即可
最近,因個特殊案例,使用Heredoc配合eval(),卻遇到了問題。狀況如下…
首先,使用『'』配合eval(),一切正常。如下…
- $php='Hypertext Preprocessor';
- $str='PHP is {$php}';
- eval("\$newstr=\"$str\" ;");
- echo $newstr;
- //print : PHP is Hypertext Preprocessor
- $php='Hypertext Preprocessor';
- $str='"PHP" is {$php}'; //用"會導致錯誤
- eval("\$newstr=\"$str\" ;");
- echo $newstr;
PHP Parse error: syntax error, unexpected T_STRING in /export/test.php(4) : eval()'d code on line 1
Parse error: syntax error, unexpected T_STRING in /export/test.php(4) : eval()'d code on line 1
PHP Notice: Undefined variable: newstr in /export/test.php on line 5
Parse error: syntax error, unexpected T_STRING in /export/test.php(4) : eval()'d code on line 1
PHP Notice: Undefined variable: newstr in /export/test.php on line 5
利用Heredoc,就不會受到『"』的影響。
- $php='Hypertext Preprocessor';
- $str='"PHP" is {$php}';
- eval("\$newstr =<<<EOD\n$str \nEOD;");
- echo $newstr;
- //print : "PHP" is Hypertext Preprocessor
PHP Parse error: syntax error, unexpected $end in /export/test.php(4) : eval()'d code on line 3
Parse error: syntax error, unexpected $end in /export/test.php(4) : eval()'d code on line 3
PHP Notice: Undefined variable: newstr in /export/test.php on line 5
Parse error: syntax error, unexpected $end in /export/test.php(4) : eval()'d code on line 3
PHP Notice: Undefined variable: newstr in /export/test.php on line 5
查了很久,看過不少解決方式…最後確認的解決之道……只是,最後多增加一個斷行(\n)即可
- eval("\$newstr =<<<EOD\n$str \nEOD;\n"); //多一個斷行即可解決
留言