]> granicus.if.org Git - php/commitdiff
Unicode support
authorDmitry Stogov <dmitry@php.net>
Wed, 11 Jul 2007 16:47:30 +0000 (16:47 +0000)
committerDmitry Stogov <dmitry@php.net>
Wed, 11 Jul 2007 16:47:30 +0000 (16:47 +0000)
ext/xmlreader/php_xmlreader.c
ext/xmlreader/tests/008.phpt

index e1012ccb0d55ad8bc7ba4324a5feffbee1b91440..0076f5ce741371c108fa47396ab082d11cf8fe9a 100644 (file)
@@ -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 */
index 18c8dba73dc1cc1d71d6684f624bdd3cfa30133b..aee3932216b64ff52a9267a407ef2c8ab58cc2a4 100644 (file)
@@ -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);