Hi Rasmus, Will your patch support strings with special characters ('<', '>', '&')?
Thanks. Dmitry. > -----Original Message----- > From: Rasmus Lerdorf [mailto:[EMAIL PROTECTED] > Sent: Thursday, June 15, 2006 10:04 PM > To: php-cvs@lists.php.net > Subject: [PHP-CVS] cvs: php-src /ext/soap php_encoding.c > > > rasmus Thu Jun 15 18:03:31 2006 UTC > > Modified files: > /php-src/ext/soap php_encoding.c > Log: > I don't think the call to xmlNodeSetContentLen() is needed here and > it is causing performance problems because it tries to > parse the blob > and create a subtree. Because we are escaping the string anyway, we > are never going to get a subtree, but the entity parsing > that is done > by xmlNodeSetContentLen() is killing performance on large blobs of > text. On one recent example it took a couple of minutes to parse > whereas if we just create a text node like this and set the contents > to the raw string it is down to milliseconds. As far as I can tell > all the tests pass with this patch. > > > http://cvs.php.net/viewcvs.cgi/php-src/ext/soap/php_encoding.c > ?r1=1.127&r2=1.128&diff_format=u > Index: php-src/ext/soap/php_encoding.c > diff -u php-src/ext/soap/php_encoding.c:1.127 > php-src/ext/soap/php_encoding.c:1.128 > --- php-src/ext/soap/php_encoding.c:1.127 Fri May 26 09:04:53 2006 > +++ php-src/ext/soap/php_encoding.c Thu Jun 15 18:03:30 2006 > @@ -17,7 +17,7 @@ > | Dmitry Stogov <[EMAIL PROTECTED]> > | > > +------------------------------------------------------------- > ---------+ > */ > -/* $Id: php_encoding.c,v 1.127 2006/05/26 09:04:53 dmitry Exp $ */ > +/* $Id: php_encoding.c,v 1.128 2006/06/15 18:03:30 rasmus Exp $ */ > > #include <time.h> > > @@ -728,7 +728,7 @@ > > static xmlNodePtr to_xml_string(encodeTypePtr type, zval > *data, int style, xmlNodePtr parent) { > - xmlNodePtr ret; > + xmlNodePtr ret, text; > char *str; > int new_len; > TSRMLS_FETCH(); > @@ -738,13 +738,15 @@ > FIND_ZVAL_NULL(data, ret, style); > > if (Z_TYPE_P(data) == IS_STRING) { > - str = > php_escape_html_entities(Z_STRVAL_P(data), Z_STRLEN_P(data), > &new_len, 0, 0, NULL TSRMLS_CC); > + str = estrndup(Z_STRVAL_P(data), Z_STRLEN_P(data)); > + new_len = Z_STRLEN_P(data); > } else { > zval tmp = *data; > > zval_copy_ctor(&tmp); > convert_to_string(&tmp); > - str = php_escape_html_entities(Z_STRVAL(tmp), > Z_STRLEN(tmp), &new_len, 0, 0, NULL TSRMLS_CC); > + str = estrndup(Z_STRVAL(tmp), Z_STRLEN(tmp)); > + new_len = Z_STRLEN(tmp); > zval_dtor(&tmp); > } > > @@ -766,7 +768,8 @@ > soap_error1(E_ERROR, "Encoding: string '%s' is > not a valid utf-8 string", str); > } > > - xmlNodeSetContentLen(ret, str, new_len); > + text = xmlNewTextLen(str, new_len); > + xmlAddChild(ret, text); > efree(str); > > if (style == SOAP_ENCODED) { > > -- > PHP CVS Mailing List (http://www.php.net/) > To unsubscribe, visit: http://www.php.net/unsub.php > > > -- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php