2017-10-04 4 views
0

J'ai un problème étrange; J'ai installé Apache 2.4 avec PHP 7.1.8. Mais lorsque vous essayez de compiler un site HTML en utilisant XML et XSL, il ignore l'option "disable-output-escaping = yes".Problème avec disable-output-escape sur macOS et PHP 7.1

Quelqu'un a une idée de ce qui peut le causer?

Voici mon code PHP:

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

Cordialement, Radek

PS: Il fonctionne sur de nombreux autres serveurs

Répondre

1

Beaucoup de choses peuvent causer cela. Les plus probables sont:

(a) Votre processeur XSLT pourrait ne pas soutenir disable-output-escaping (il est une option et dépréciée)

(b) Vous pourriez envoyer la sortie XSLT vers une destination autre que un serializer (par exemple, à un arbre DOM)

Vraiment, vous ne devriez pas utiliser disable-output-escape. 90% du temps, il est seulement utilisé par des gens qui n'ont pas vraiment maîtrisé la bonne façon de faire les choses dans XSLT.

PLUS TARD

Comme il ressort de la dernière mise à jour de votre poste, vous utilisez transformToDoc, qui écrit l'arbre résultat XSLT à un DOM; vous êtes en train de sérialiser le DOM en utilisant doc-> formatOutput qui utilise le sérialiseur DOM plutôt que le sérialiseur XSLT; ceci n'a aucune connaissance des attributs d'échappement de sortie de désactivation dans le XSLT.

(La documentation à http://php.net/manual/en/xsltprocessor.transformtodoc.php a un commentaire contribué utilisateur indiquant qu'il est généralement préférable d'utiliser transformToXML car de cette manière, le processeur XSLT peut contrôler le format de sortie.)

Je ne sais pas grand-chose à propos du processeur PHP XSLT natif, mais le même problème se produit avec d'autres environnements linguistiques. Incidemment, vous aimeriez savoir que XSLT 3.0 est maintenant disponible pour l'environnement PHP via le produit Saxon/C (voir www.saxonica.com). L'une des raisons pour lesquelles les gens recourent à disable-output-escaping dans XSLT 1.0 est que XSLT 1.0 ne fournit pas de moyens simples de regroupement. Ceci est corrigé dans les versions ultérieures de XSLT mais malheureusement le PHP XSLTProcessor n'a jamais été mis à jour.

+0

Merci pour votre réponse. Peut-être que mes compétences ne sont pas très bonnes mais je n'ai aucune idée de comment ouvrir et fermer un conteneur div dans une boucle en fonction du réglage et du compteur actuel. Pourtant, le problème est que c'est un logiciel un peu populaire et je ne peux pas le changer comme ça. Je suis en train de mettre à jour le message original avec mon code. –

+0

Oui, les 90% qui abusent de d-o-e ont un état d'esprit «d'ouverture et de fermeture de conteneurs» plutôt que de construire des nœuds dans un arbre de résultats. Il m'a fallu quelques mois pour franchir cette étape moi-même, je m'en souviens très bien. –