首页 > 解决方案 > PHP:加载另一个 php 文件源并替换字符串“ ”的所有实例

问题描述

我有一个 .php 文件,它实际上是一个带有一些内联 PHP 代码的 SVG 文件。让我们称之为inner.php

<?php 
    $uuid = uniqid();
?>
<svg class="__combo" id=<?php echo $uuid ?>
...
</svg>

我正在编写另一个 php 文件,它应该发出 inner.php 的内容,但所有实例都<?php ... ?>替换为某个字符串(例如“AA”)。文件(我们称之为 outer.php)现在看起来像这样:

    <?php 
        $svg_body = file_get_contents("inner.php"));
        $replaced = preg_replace("??","AA" , $svg_body);

        echo "$replaced"
    ?>

我标有“??” 我想放置一个正则表达式以包含任何以 . 开头"<?php"和结尾的字符串的部分"?>"。我希望看到的输出是

    "AA"
    <svg class="__combo" id="AA"
    ...
    </svg>

基本上,我找不到在 PHP中转义包含<?phpand的字符串的方法?>

标签: phpregex

解决方案


另一种方法是通过 tokenizer Extension 使用 PHP 的解析器:

<?php

$tokens = token_get_all("<svg>\n<?php echo; ?></svg>");

$result='';
$in_php = false;
foreach ($tokens as $token) {
   if ($token[0]==T_INLINE_HTML) {
     $result .= $token[1];
     $in_php = false;
   } else if (!$in_php) {
     $result .= "AAA";
     $in_php=true;
    }
}

echo $result;

https://3v4l.org/jEpYi

这样做的好处是,它还可以处理其他打开的标签,比如<?=没有结束标签的文件。并处理结束标记也出现在 PHP 代码中的情况(即在注释中)


推荐阅读