cvs: pear /XML_Transformer Transformer.php
| From: | Kristian K�hntopp | 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 & 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("&","&",$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(