使用 XSLT 和 PHP 双 HTML 换行符
Double HTML line-breaks with XSLT and PHP
我在 PHP 中编写了这个脚本,它结合了 XML 文档和 XSLT 样式 sheet,在浏览器中回显结果并将其发送到电子邮件地址。
<?php
$xslDoc = new DOMDocument();
$xslDoc->load("xsltDocument.xslt");
$xmlDoc = new DOMDocument();
$xmlDoc->load("xmlDocument.xml");
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
$email = $proc->transformToXML($xmlDoc);
echo $email;
$headers = "MIME-Version: 1.0" . "\r\n" .
"Content-type: text/html; charset=UTF-8" . "\r\n";
mail("email@gmail.com","Watches", $email, $headers);
?>
除 HTML 换行元素 <br/>
外,一切都按预期工作,它被加倍了。在 XSLT sheet 中,换行符写成 <br />
,但是当我检查 PHP 输出的结果 HTML 的源代码时,换行符写成<br></br>
。这会导致在应该有一个的地方出现两个换行符。
同样的情况也发生在电子邮件中,而且表格的显示方式也存在问题。
我无法 post 完整的 XML 和 XSLT 样式sheet,但这里有一些。
xslt:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:ms="urn:schemas-microsoft-com:xslt"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
exclude-result-prefixes="msxsl ms dt i">
<xsl:output
encoding="UTF-8"
method="html"
indent="yes"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
media-type="application/xhtml+xml"/>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- NAME: 1:2:1 COLUMN -->
<meta name="viewport" content="width=device-width"></meta>
<meta http-equiv="X-UA-Compatible" content="IE=edge"></meta>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
xml:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="xsltDocument.xslt"?>
知道为什么会这样吗?
我最终在 <xml output/>
上设置了 method="xml"
而不是 method="html"
,这使得 PHP 的结果输出在浏览器和电子邮件中正确呈现。
我在 PHP 中编写了这个脚本,它结合了 XML 文档和 XSLT 样式 sheet,在浏览器中回显结果并将其发送到电子邮件地址。
<?php
$xslDoc = new DOMDocument();
$xslDoc->load("xsltDocument.xslt");
$xmlDoc = new DOMDocument();
$xmlDoc->load("xmlDocument.xml");
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
$email = $proc->transformToXML($xmlDoc);
echo $email;
$headers = "MIME-Version: 1.0" . "\r\n" .
"Content-type: text/html; charset=UTF-8" . "\r\n";
mail("email@gmail.com","Watches", $email, $headers);
?>
除 HTML 换行元素 <br/>
外,一切都按预期工作,它被加倍了。在 XSLT sheet 中,换行符写成 <br />
,但是当我检查 PHP 输出的结果 HTML 的源代码时,换行符写成<br></br>
。这会导致在应该有一个的地方出现两个换行符。
同样的情况也发生在电子邮件中,而且表格的显示方式也存在问题。
我无法 post 完整的 XML 和 XSLT 样式sheet,但这里有一些。
xslt:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:ms="urn:schemas-microsoft-com:xslt"
xmlns:dt="urn:schemas-microsoft-com:datatypes"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
exclude-result-prefixes="msxsl ms dt i">
<xsl:output
encoding="UTF-8"
method="html"
indent="yes"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
media-type="application/xhtml+xml"/>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!-- NAME: 1:2:1 COLUMN -->
<meta name="viewport" content="width=device-width"></meta>
<meta http-equiv="X-UA-Compatible" content="IE=edge"></meta>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></meta>
xml:
<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="xsltDocument.xslt"?>
知道为什么会这样吗?
我最终在 <xml output/>
上设置了 method="xml"
而不是 method="html"
,这使得 PHP 的结果输出在浏览器和电子邮件中正确呈现。