【问题标题】:Writting php code as regex in str_replace在 str_replace 中将 php 代码编写为正则表达式
【发布时间】:2013-08-01 08:01:17
【问题描述】:

直接点

  echo str_replace('</h3><table','<?php echo 'Hello World!'; ?>',$doc->saveHTML());

上面的代码中的php代码(&lt;?php echo 'Hello World!'; ?&gt;)是否会被执行?

【问题讨论】:

  • 何不试试看呢?
  • 不工作。 @Siolio。

标签: php regex


【解决方案1】:

在函数中放置一个 echo 语句,结果也被 echo'ed 是很奇怪的。 把你的代码,实际上是它的结果放在一个变量中,让它在函数中被替换:

$replacement = 'Hell0 World';
echo str_replace('</h3><table', $replacement, $doc->saveHTML());

替换变量可以存在于你想要的所有东西中,如果正确地避开了路线。

【讨论】:

    【解决方案2】:

    不,你的代码不会被执行,但你想escape the apostrophes。如果您在 PHP 中直接将 string 键入为 string ,则应在代码中将 ' 的每个实例替换为 \'

    str_replace('</h3><table', '<?php echo \'Hello World!\'; ?>', $doc->saveHTML());
    

    如果代码已经在变量中、从文件中加载等,则无需转义。

    如果你想直接输入你的 PHP 代码并且你不想转义任何东西,你可以使用HEREDOC syntax:

    $str = <<<EOD
    <?php echo 'Hello World!'; ?>
    EOD;
    echo str_replace('</h3><table', $str, $doc->saveHTML());
    

    现在,引号中的所有内容(""'')都是 string,并且将不会被执行。所以如果你想让代码被执行,不要把它放在引号里。这不能用echo 轻松解释,但你already told it's just a sample,所以假设你想使用rand() function

    在这种情况下,您不想这样做:

    str_replace('</h3><table', '<?php echo rand(); ?>', $doc->saveHTML());
    

    但你只需要:

    str_replace('</h3><table', rand(), $doc->saveHTML());
    

    最后一个问题是您应该在调用str_replace 函数之前执行代码。如果您有很多要执行的代码,这将很有用:

    $replacement = rand();
    str_replace('</h3><table', $replacement, $doc->saveHTML());
    

    【讨论】:

    • 只是示例,但如何添加更多 php 代码?
    • @Siolio 只需在您喜欢的文本编辑器中将每个' 替换为\' 或使用HEREDOC 语法。
    • 非常感谢您的回答,但 php 代码 是原样的回声,而不是执行
    • 我刚试过,但是 php 代码 是原样的回声,而不是执行
    • 我告诉过你,你的代码不会被执行。如果要执行代码,请在调用str_replace() 函数之前执行此操作,将输出存储在变量中,最后将&lt;/h3&gt;&lt;table 替换为您之前创建的变量。
    猜你喜欢
    • 2021-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 2019-08-10
    • 1970-01-01
    相关资源
    最近更新 更多