【问题标题】:Issue with disable-output-escaping on macOS and PHP 7.1macOS 和 PHP 7.1 上的禁用输出转义问题
【发布时间】:2017-10-04 13:35:48
【问题描述】:

我有一个奇怪的问题;我用 PHP 7.1.8 安装了 Apache 2.4。但是当尝试使用 XML 和 XSL 编译 HTML 站点时,它一直忽略“disable-output-escaping=yes”选项。

有人知道是什么原因造成的吗?

这是我的 PHP 代码:

                $doc = $processor->transformToDoc( $this->_xml );
                $doc->formatOutput = true;
                return $this->cleanOut( $doc->saveXML() );

问候, 拉德克

PS:它适用于许多其他服务器

【问题讨论】:

    标签: php xml apache xslt


    【解决方案1】:

    很多事情都可能导致这种情况。最有可能的是:

    (a) 您的 XSLT 处理器可能不支持禁用输出转义(这是一个可选且已弃用的功能)

    (b) 您可能将 XSLT 输出发送到序列化程序以外的目的地(例如,发送到 DOM 树)

    真的,您不应该使用禁用输出转义。 90% 的情况下,它只被那些真正没有掌握在 XSLT 中做事的正确方法的人使用。

    稍后

    从您的帖子的最新更新中可以清楚地看出,您正在使用 transformToDoc,它将 XSLT 结果树写入 DOM;然后使用 doc->formatOutput 序列化 DOM,它使用 DOM 序列化程序而不是 XSLT 序列化程序;这不知道 XSLT 中的禁用输出转义属性。

    http://php.net/manual/en/xsltprocessor.transformtodoc.php 的文档有一条用户提供的评论指出使用 transformToXML 通常会更好,因为这样,XSLT 处理器可以控制输出格式。)

    我对原生 PHP XSLT 处理器了解不多,但在其他语言环境中也会出现同样的问题。

    顺便说一下,您可能想知道 XSLT 3.0 现在可以通过 Saxon/C 产品用于 PHP 环境(请参阅 www.saxonica.com)。人们在 XSLT 1.0 中求助于disable-output-escaping 的原因之一是因为 XSLT 1.0 没有提供简单的方法来进行分组。这在后来的 XSLT 版本中得到了修复,但不幸的是 PHP XSLTProcessor 从未更新。

    【讨论】:

    • 感谢您的回答。也许我的技能不是那么好,但我不知道如何根据设置和当前计数器循环打开和关闭 div 容器。然而问题是它是一个有点流行的软件,我不能那样改变它。我正在用我的代码更新原始帖子。
    • 是的,90% 的滥用 d-o-e 的人都有“打开和关闭容器”的心态,而不是在结果树中构建节点。我自己花了几个月的时间才走出那个阶段,我记得很清楚。
    猜你喜欢
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多