我有这样的PHP代码段(snippet.php
):
<?php
$some_param = some_function();
?>
<p>
Text, bla bla bla... <?php echo $some_param ?> other text
more text
</p>
我像这样加载这些代码:
$html = file_get_contets('snippet.php');
$dom = new DOMDocument('1.0');
$dom->loadHTML($html);
并使用xpath进行修改:
$xpath = new DOMXPath($dom);
foreach ($xpath->query("//text()") as $q) {
$str = trim($q->nodeValue);
if (isset($strings[$str])) {
$q->nodeValue = translate($str);
}
}
当我尝试保存此文件时出现问题:
$dom->save($out);
它彻底破坏了片段结构:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><?php
$some_param = some_function();
??></head><body><p>
Translated text, bla bla bla... <?php echo $some_param ?> other text
more text
</p></body></html>
保存时,我该怎么做才能恢复原始代码段结构?
答案 0 :(得分:0)
PHP代码段为Processing Instructions。您可以使用XPath查询它们:
//processing-instruction('php')
对于任何文本节点,节点测试
text()
都为true。例如,child::text()
将选择上下文节点的文本节点子节点。类似地,节点测试comment()
对于任何注释节点都为真,并且对于任何处理指令,节点测试processing-instruction()
都为真。processing-instruction()
测试可能有一个Literal参数;在这种情况下,对于任何名称等于Literal值的处理指令都是如此。
中解释了如何将它们添加到文档中