【问题标题】:Putting PHP code in a string将 PHP 代码放入字符串中
【发布时间】:2013-04-20 20:08:35
【问题描述】:

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

$phpCode = '<? if($condtion){ ?>';

由于某种原因,当我执行此操作并回显代码时,我没有得到开始的 PHP 标记 &lt;?

我错过了什么吗?有没有更好或更合适的方法来做到这一点?我目前正在查看PHP docs on strings,但我希望得到您的反馈。

编辑:我之所以使用撇号 (') 而不是引号 (") 是因为我不希望代码填写条件值。我希望它按原样回显。

【问题讨论】:

  • 您是否将代码回显到 HTML 输出中?如果是这样,它被解释为一个标签,需要转义才能出现在屏幕上。
  • 你只是给出一个输出还是运行它?
  • 它正在被放入一个稍后运行的 .php 文件中。
  • 您构建字符串的方式没有任何问题。引用htmlspecialchars 的答案适用于在网页中显示字符串,但如果您打算实际运行生成的代码则不适用。在这种情况下,您应该可以轻松地使用file_put_contents 之类的内容按原样编写字符串。但是,我会认真质疑使用 php 脚本编写 php 代码是否是一个好的整体策略。
  • @grossvogel 如果这不允许生成的代码运行,那么htmlspecialchars() 不是我正在寻找的解决方案。不幸的是,我坚持将输出作为纯文本写入文件。也许我的特殊问题无法解决:(

标签: php string syntax


【解决方案1】:

使用htmlspecialchars():

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

【讨论】:

  • 不应该htmlspecialchars() 足够逃避吗? Escaping all entities is slight overkill.
  • 谢谢!这似乎奏效了 :) 然而,由于输出将是纯文本,我将变量设置为:$phpCode = htmlspecialchars('&lt;? if($condtion){ ?&gt;');
  • 正如@grossvogel 在对该问题的评论中提到的那样,这将不允许运行代码。我需要将代码放入稍后运行的 php 文件中。因此,$phpCode 的内容需要是可执行的。看来我的困境是我仅限于将纯文本输出到目标文档中。
【解决方案2】:

你需要echo htmlspecialchars($phpCode);

【讨论】:

    【解决方案3】:

    试试这些$str= htmlentities('&lt;?php //***code***// ?&gt;');

    【讨论】:

      【解决方案4】:

      您也可以使用 HTML 实体。

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

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

      来源HTML Entities

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          【解决方案6】:

          已经有几个答案了,但只是为了添加我的 0.02 美元...

          这段代码:

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

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

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

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

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

          另一种选择是从命令行运行您的脚本。它不会尝试呈现您的输出,而是逐字逐句吐出。

          【讨论】:

            【解决方案7】:

            Eval php documentation

            如果要运行字符串中的代码,请使用Eval()

            示例

            $str = "Hello ";
            eval('$str .= "World"');
            
            echo $str;
            /* Output: Hello World */
            

            【讨论】:

            • 我认为这不是 OP 所要求的
            • OP 在 cmets It is being put into a .php file that will be run at a later time 中说。 eval() 可以做什么。
            • eval 将立即评估字符串,而不是稍后。 OP 在文件中想要的(使用您的示例)是 $str = "Hello "; $str .= "World"; 而不是 Hello World
            • 那么“将在以后运行”这个词在 OP imo 中选择得非常糟糕。
            猜你喜欢
            • 1970-01-01
            • 2017-03-23
            • 2022-08-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多