我正在尝试生成包含'模板html文件'的php文件,如下所示:
$page = htmlspecialchars("Hello! <?php include("template.html"); ?>");
但是,当我运行它时,我得到:
解析错误:语法错误,第15行/home/oliver/web/postmanapp.com/public/core.php中的意外T_STRING
我很确定我需要逃避PHP代码,只是不确定如何。
答案 0 :(得分:8)
您必须转义以双引号声明的字符串内的任何双引号。所以这应该有效:
$code = "Hello! <?php include(\"template.html\"); ?>";
如果您想将该代码放入文件中,可以使用file_put_contents
function:
file_put_contents('myscript.php', $code);
答案 1 :(得分:4)
答案是其他一些建议的组合,但他们都没有解决问题,甚至合并!
问题1.未转发双引号
"Hello! <?php include("template.html"); ?>"
这里有一个看起来像单个字符串的东西。 PHP看到开头的引用,然后它在单词模板之前得到引号,它说:哦,字符串现在就完成了。然后它看到模板,它认为它是一个变量。然后它看到一个点并认为它是一个新的连接运算符。然后它在html
之后看到引号,它认为它是一个新的字符串,在这样的变量之后不允许这样做。
所以,你需要:
'Hello! <?php include("template.html"); ?>'
(我推荐的是。在PHP中单引号字符串运行得稍微快一点,因为它不必查看字符串中的变量。)
或者,正如对方建议的那样,使用双引号的转义字符:
"Hello! <?php include(\"template.html\"); ?>"
问题2. htmlspecialchars()的错误位置
但是,你有另一个更糟糕的问题。 htmlspecialchars基本上将所有HTML字符转换为HTML字符实体。
换句话说, <
会变为 <
。
因此,您输入PHP文件的内容将是:
Hello! <?php include("template.html"); ?>
当您运行该文件时,PHP将不会执行,因为没有有效的打开标记。
问题3.这不是很好用的包含
我认为有一种解决问题的方法比使用PHP编写包含ANOTHER文件的PHP包含标记更好。
早期用户是对的... file_put_contents()或file_get_contents()可能更接近你想要的东西。但实际上,无论何时使用PHP向PHP写入另一个文件,都可能有更好的方法。我差点保证。
答案 2 :(得分:-3)
问题出在?&gt;它总是在php中结束一个代码块,导致一个未终止的字符串。您需要做的就是将结束标记拆分为两个可以连接的单独字符串:
$page = htmlspecialchars("Hello! <?php include("template.html"); ?" . ">");
并且,如前面的答案所述,您还需要转义字符串中的双引号,或使用单引号:
$page = htmlspecialchars("Hello! <?php include('template.html'); ?" . ">");
当你不使用隐含变量替换时,我还建议养成使用单引号的习惯。我似乎记得读它稍快一些,因为字符串不需要解析变量名。