2

我有这样的 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... &lt;?php echo $some_param ?&gt; other text
    more text
</p></body></html>

保存时如何恢复原始代码段结构?

4

1 回答 1

0

PHP 片段是处理指令您可以使用XPath查询它们:

//processing-instruction('php')

节点测试text()对于任何文本节点都是正确的。例如,child::text()将选择上下文节点的文本节点子项。类似地,节点测试comment()对于任何评论节点processing-instruction()都为真,节点测试对于任何处理指令都为真。测试processing-instruction()可能有一个 Literal 参数;在这种情况下,对于名称等于 Literal 值的任何处理指令都是如此。

如何将它们添加到文档中解释了

于 2012-06-21T12:09:54.543 回答