要件は、データ xml ファイルを html テンプレートに変換し、このテンプレートを使用して実際のページを生成し、電子メールに埋め込むことです。
それでは、次の例を見てみましょう。
XML データ ファイル (test.xml):
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
<url><![CDATA[http://www.example.net/testurl/{{value1}}?{{value2}}&{{value3}}]]></url>
XSLT ファイル (test.xslt):
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" version="1.0"/>
<xsl:template match="/">
<html>
<head>
</head>
<body>
<a>
<xsl:attribute name="href">
<xsl:value-of select="/url" />
</xsl:attribute>
Click
</a>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
サーバースクリプト (test.php)
<?php
$xslDoc = new DOMDocument();
$xslDoc->load("test.xslt");
$xmlDoc = new DOMDocument();
$xmlDoc->load("test.xml");
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
echo $proc->transformToXML($xmlDoc);
?>
上記の .php ファイルを実行すると、結果は次のようになります。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></head>
<body><a href="http://www.example.net/testurl/%7B%7Bvalue1%7D%7D?%7B%7Bvalue2%7D%7D&%7B%7Bvalue3%7D%7D">
Click
</a></body>
</html>
プロパティがエンコードされていることに注意してください。これは、プレースホルダー (つまり、など)href
を埋める既存のコードと互換性がありません。{{value1}}
既存のコードが機能するようにエンコーディングを回避するにはどうすればよいですか?