将PHP代码放入字符串中

13

我该如何将 PHP 代码放入字符串中?

$phpCode = '<? if($condtion){ ?>';
由于某些原因,当我执行此操作并回显代码时,我没有得到PHP起始标签<?。我是否遗漏了什么?是否有更好或更适当的方法来完成这个操作?我目前正在查看关于字符串的PHP文档,但我希望得到您的反馈。 编辑:我使用单引号(')而不是双引号(")的原因是因为我不希望代码填充条件的值。我希望它按原样回显。

1
你是将代码输出到HTML中吗?如果是,它会被解释为标签并需要进行转义才能在屏幕上显示。 - grossvogel
你只是输出还是也运行它? - S.Visser
1
你构建字符串的方式没有任何问题。关于 htmlspecialchars 的答案适用于在网页中显示字符串,但不适用于计划实际运行生成代码的情况。在这种情况下,您应该毫无问题地像使用 file_put_contents 一样将字符串写为原样。但是,我会认真质疑使用 PHP 脚本编写 PHP 代码是否是一个好的总体策略。 - grossvogel
你没有解决不了的问题。如果你在代码片段后面加上 file_put_contents('/file/path', $phpCode);,你会得到包括开始标签在内的代码,并将其写入 /file/path。我认为更大的问题在于为什么你要通过运行其他 PHP 脚本来构建 PHP 脚本。 - grossvogel
好的,让我们明确一下。这些仅仅是代码片段,需要有条件地放进动态生成的网站中。否则我会直接把它们放到目标文档中,而不是把代码放到字符串中并以这种方式放置到文档中。 - Chris Bier
显示剩余5条评论
7个回答

12
使用 htmlspecialchars() 函数:
$phpCode = '<? if($condtion){ ?>';
echo htmlspecialchars($phpCode);

3
htmlspecialchars()不应该足够转义吗?转义所有实体有点过头了。 - grossvogel
谢谢!这似乎起作用了 :) 但由于输出将是纯文本,所以我将变量设置为:$phpCode = htmlspecialchars('<? if($condition){ ?>'); - Chris Bier
正如@grossvogel在问题的评论中提到的那样,这将不允许代码运行。我需要将代码放入一个稍后将运行的php文件中。因此,$phpCode的内容需要是可执行的。看来我的困境是我只能将纯文本输出到目标文档中。 - Chris Bier

6
您需要执行 echo htmlspecialchars($phpCode);

1

尝试这个 $str= htmlentities('<?php //***code***// ?>');


0

您也可以使用HTML实体。

当您在PHP中仅替换左方括号时,其余部分将被视为字符串并在echo解析时输出:

<?php
    //&lt; is the HTML entity for '<' (without quotes).
    $str = '&lt;?php yourstring ?>';
    echo $str;
?>

源代码 HTML 实体


0

这个问题已经有了几个答案,但是我也想加上我的看法...

这段代码:

<?php
    $test = '<?php echo "hello world!"; ?>';
    echo $test;
?>

在浏览器中会产生一个空白的白屏,但如果您查看源代码,您将看到以下输出:

<?php echo "hello world!"; ?>

这与浏览器呈现您的PHP代码的方式有关。 浏览器不是用来呈现PHP代码的,而是用来呈现HTML标记的。 如果您正在回显代码,因为您正在测试将要写入文件的内容,则只需查看源代码以验证输出的内容是否是您想要写入文件的内容。 您在浏览器本身中看不到它,因为它不知道如何呈现?php标记,更不用说如何处理echo属性了。

作为可选项,就像每个人已经说明的那样,如果您只想在浏览器中呈现字符串而无需查看源代码,则可以通过htmlspecialchars传递字符串。 如果您要将其写入文件,则不应该这样做,但可能会帮助您调试输出。

另一个选择是从命令行运行脚本。 它不会尝试呈现您的输出,而是直接原样输出。


0

您可以通过以下方式将 PHP 代码输出为文本

$phpCode = '<? if($condtion){ ?>';
echo "<pre>";
echo htmlspecialchars($phpCode);
echo "</pre>";

-1

Eval php documentation

如果你想要运行字符串中的代码,可以使用Eval()

例子

$str = "Hello ";
eval('$str .= "World"');

echo $str;
/* Output: Hello World */

我认为这不是原帖作者所询问的。 - Jeff Lambert
1
OP在评论中说:“它将被放入一个.php文件中,在稍后运行”。使用eval()可以做什么。 - S.Visser
eval会立即执行字符串,而不是在以后的时间。OP想要在文件中使用您提供的示例$str = "Hello "; $str .= "World";,而不是Hello World - Jeff Lambert
我认为,OP使用“稍后运行”这个词非常不恰当。 - S.Visser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接