【问题标题】:Double HTML line-breaks with XSLT and PHP使用 XSLT 和 PHP 的双 HTML 换行符
【发布时间】:2015-09-22 14:49:08
【问题描述】:

我用 PHP 编写了这个脚本,它结合了 XML 文档和 XSLT 样式表,在浏览器中回显结果并将其发送到电子邮件地址。

<?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 换行元素 &lt;br/&gt; 加倍。在 XSLT 表中,换行符写成 &lt;br /&gt;,但是当我检查 PHP 生成的 HTML 输出的源代码时,换行符写成 &lt;br&gt;&lt;/br&gt;。这会导致应该有两个换行符。

电子邮件中也会发生同样的情况,并且表格的显示方式也存在问题。

我无法发布完整的 XML 和 XSLT 样式表,但这里有一些。

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"?>

任何想法为什么会发生这种情况?

【问题讨论】:

标签: php html xml xslt line-breaks


【解决方案1】:

我最终在 &lt;xml output/&gt; 上设置了 method="xml" 而不是 method="html",这使得 PHP 的结果输出在浏览器和电子邮件中正确呈现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-06
    • 1970-01-01
    • 2013-11-07
    • 2011-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多