diff options
| author | Dmitry Stogov <dmitry@php.net> | 2007-07-11 16:47:30 +0000 |
|---|---|---|
| committer | Dmitry Stogov <dmitry@php.net> | 2007-07-11 16:47:30 +0000 |
| commit | d3a6deb076d96c6622732f5582727059cb659818 (patch) | |
| tree | ac22c2b27d383f3619042acb3c5e3aea305d0026 | |
| parent | bf16e86999873fd16805fe6782a65e3e79acb0d4 (diff) | |
| download | php-git-d3a6deb076d96c6622732f5582727059cb659818.tar.gz | |
Unicode support
| -rw-r--r-- | ext/xmlreader/php_xmlreader.c | 16 | ||||
| -rw-r--r-- | ext/xmlreader/tests/008.phpt | 2 |
2 files changed, 14 insertions, 4 deletions
diff --git a/ext/xmlreader/php_xmlreader.c b/ext/xmlreader/php_xmlreader.c index e1012ccb0d..0076f5ce74 100644 --- a/ext/xmlreader/php_xmlreader.c +++ b/ext/xmlreader/php_xmlreader.c @@ -1094,16 +1094,22 @@ PHP_METHOD(xmlreader, XML) int source_len = 0, encoding_len = 0; long options = 0; xmlreader_object *intern = NULL; - char *source, *uri = NULL, *encoding = NULL; + zstr source; + char *uri = NULL, *encoding = NULL; int resolved_path_len; char *directory=NULL, resolved_path[MAXPATHLEN]; xmlParserInputBufferPtr inputbfr; xmlTextReaderPtr reader = NULL; + zend_uchar source_type; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "S|s!l", &source, &source_len, &encoding, &encoding_len, &options) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "t|s!l", &source, &source_len, &source_type, &encoding, &encoding_len, &options) == FAILURE) { return; } + if (source_type == IS_UNICODE) { + source.s = php_libxml_unicode_to_string(source.u, source_len, &source_len TSRMLS_CC); + } + id = getThis(); if (id != NULL && ! instanceof_function(Z_OBJCE_P(id), xmlreader_class_entry TSRMLS_CC)) { id = NULL; @@ -1118,7 +1124,11 @@ PHP_METHOD(xmlreader, XML) RETURN_FALSE; } - inputbfr = xmlParserInputBufferCreateMem(source, source_len, XML_CHAR_ENCODING_NONE); + inputbfr = xmlParserInputBufferCreateMem(source.s, source_len, XML_CHAR_ENCODING_NONE); + + if (source_type == IS_UNICODE) { + efree(source.s); + } if (inputbfr != NULL) { /* Get the URI of the current script so that we can set the base directory in libxml */ diff --git a/ext/xmlreader/tests/008.phpt b/ext/xmlreader/tests/008.phpt index 18c8dba73d..aee3932216 100644 --- a/ext/xmlreader/tests/008.phpt +++ b/ext/xmlreader/tests/008.phpt @@ -22,7 +22,7 @@ $xmlstring = '<?xml version="1.0" encoding="UTF-8" standalone="no"?> </MOVIE> </LIST>'; -$dtdfile = rawurlencode(dirname(__FILE__)) . b'/dtdexample.dtd'; +$dtdfile = rawurlencode((binary)dirname(__FILE__)) . b'/dtdexample.dtd'; $file = dirname(__FILE__) . '/__008.xml'; file_put_contents($file, $xmlstring); |
