2017-10-04 62 views
0

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

任何人都有一个想法是什么会导致它?

这是我的PHP代码:

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

问候, 拉狄克

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

回答

1

许多事情可能导致此。最有可能的是:

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

(b)您可能会被发送XSLT输出比其他目的地一个串行器(例如,一个DOM树)

真的,你不应该使用disable-output-escaping。 90%的时间只用于那些真正没有掌握正确方法在XSLT中完成任务的人。

LATER

。从最新的更新您的文章清楚,你正在使用transformToDoc,这写XSLT结果树的DOM;然后使用doc-> formatOutput来序列化DOM,它使用DOM序列化器而不是XSLT序列化器;这不知道XSLT中的禁用输出转义属性。

(在http://php.net/manual/en/xsltprocessor.transformtodoc.php文档有一个用户提供的评论指出,它通常是更好,因为这样一来,XSLT处理器得到控制输出格式使用transformToXML。)

我什么都不知道多少关于本机PHP XSLT处理器,但其他语言环境也会出现同样的问题。顺便提一下,您可能想知道XSLT 3.0现在可以通过Saxon/C产品用于PHP环境(请参阅www.saxonica.com)。人们在XSLT 1.0中使用disable-output-escaping的原因之一是因为XSLT 1.0没有提供简单的分组方法。这在后来的XSLT版本中得到修复,但不幸的是PHP XSLTProcessor从未更新过。

+0

感谢您的回答。也许我的技能不是很好,但我不知道如何根据设置和当前计数器打开和关闭div容器。然而,问题是它是一个有点流行的软件,我不能像那样改变它。 我正在用我的代码更新原始文章。 –

+0

是的,90%误用d-o-e的人有一个“打开和关闭容器”的思维模式,而不是在结果树中构建节点。我花了几个月的时间才亲自过去,我记得很清楚。 –