DOMDocumentとDOMXPathを使用してHTMLテンプレートのマージコードを検索して置き換えるPHPスクリプトがあります。簡単な例は次のようになります。PHPでDOMNodeを持つテキストノードにHTMLを挿入する方法
<html>
<head>
<title>Title</title>
</head>
<body>
<p>Hello {greeting}!</p>
<table><tr>
<td>Details:</td>
<td>{details}</td>
</tr></table>
</body>
</html>
キーマージフィールドと一致する連想配列に基づいて、次のコードを置換フィールド:
private function substituteFields (DOMNode $node, $fields)
{
$x = new DOMXPath ($node->ownerDocument);
foreach ($fields as $field => $value)
{
$query = $x->query (".//text()[contains(., '{" . $field . "}')]", $node);
foreach ($query as $subnode)
{
$subnode->nodeValue = str_replace ("{" . $field . "}", $value, $subnode->nodeValue);
}
}
}
これはうまく機能しています。
しかし、いくつかのマージコードがそれらに代入HTML必要があります。
$fields ['greeting'] = "Joe Soap";
$fields ['details'] = "<div class='details'>Details here</div>";
を置換が起こっているが、HTMLは、ほとんどの場合、おそらく賢明な考え方である、エスケープされています。
この問題を回避することはできますか?