cvs: pear /XML_Transformer Transformer.php

From: Date: Sun, 28 Sep 2003 15:26:14 +0000
Subject: cvs: pear /XML_Transformer Transformer.php
Groups: php.pear.cvs 
Request: Send a blank email to pear-cvs+get-13148@lists.php.net to get a copy of this message
kk Sun Sep 28 11:26:14 2003 EDT Modified files: /pear/XML_Transformer Transformer.php Log: Patch as suggested by Azundris: - the str_replace() fixes the problem of entities being deescaped during recursion. Thus we now handle <b>this &amp; that</b> gracefulle. - the added code around the recursion makes us handle XML fragments gracefully. Thus we can now safely return "<t1/><t2/>" from an end handler. - The final preg_replace will transform <br></br> and the likes into <br />. This is necessary, because very old browsers treat <br></br> incorrectly as <br><br>. Index: pear/XML_Transformer/Transformer.php diff -u pear/XML_Transformer/Transformer.php:1.117 pear/XML_Transformer/Transformer.php:1.118 --- pear/XML_Transformer/Transformer.php:1.117 Sat Sep 27 12:09:02 2003 +++ pear/XML_Transformer/Transformer.php Sun Sep 28 11:26:14 2003 @@ -13,7 +13,7 @@ // | license@php.net so we can mail you a copy immediately. | // +---------------------------------------------------------------------------+ // -// $Id: Transformer.php,v 1.117 2003/09/27 16:09:02 sebastian Exp $ +// $Id: Transformer.php,v 1.118 2003/09/28 15:26:14 kk Exp $ // require_once 'XML/Transformer/CallbackRegistry.php'; @@ -28,7 +28,7 @@ * * @author Sebastian Bergmann <sb@sebastian-bergmann.de> * @author Kristian Köhntopp <kris@koehntopp.de> -* @version $Revision: 1.117 $ +* @version $Revision: 1.118 $ * @access public */ class XML_Transformer { @@ -126,6 +126,12 @@ */ var $_secondPassRequired = false; + /** + * @var integer + * @access private + */ + var $_depth = 0; + // }}} // {{{ function XML_Transformer($parameters = array()) @@ -406,6 +412,8 @@ return $xml; } + $xml = str_replace("&","&amp;",$xml); + // Create XML parser, set parser options. $parser = xml_parser_create(); @@ -469,9 +477,14 @@ $secondPassRequired = $this->_secondPassRequired; if ($secondPassRequired) { + $this->depth++; $this->_secondPassRequired = false; - $result = $this->transform($result); + $this->depth--; + } + + if ($this->depth==0) { + $result=preg_replace("/<(\w+)([^>]*)><\/\\1>/s","<\\1\\2 />",$result); } $this->_secondPassRequired = $secondPassRequired; @@ -604,7 +617,7 @@ ) ); - $cdata = $transformer->transform($cdata); + $cdata = substr($transformer->transform("<_>$cdata</_>"),3,-4); if ($this->_checkDebug('&RECURSE')) { $this->sendMessage(

« previous php.pear.cvs (#13148) next »