php - 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中转义包含<?php
and的字符串的方法?>
解决方案
另一种方法是通过 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;
这样做的好处是,它还可以处理其他打开的标签,比如<?=
没有结束标签的文件。并处理结束标记也出现在 PHP 代码中的情况(即在注释中)
推荐阅读
- amazon-mws - 如何使用 MWS API 获取要点和产品图片
- linux - 我们使用 openstack keypair 命令到 vm 时的路径是什么
- node.js - 当多个变量声明为全局时,Eslint 抛出异常
- spring-boot - 在基于 Netty 的应用程序中进行单元测试后,SpringApplication 未关闭
- asp.net-mvc - HTTP 错误 500.19 - 内部服务器错误 -1
- ios - 如何修复 user = [AuthDataResult?] nil 和错误 - FIRAuthDomain 代码 17026
- java - Java 子串条件结束
- ios - 如何使用 swift 中的按钮操作使 Fscalender 上个月和下个月
- rxjs - ReactiveX 运算符 - 去抖动,但先触发,然后过滤其他运算符
- android - 对 ViewModel Provider Factory 的需求