#36596 [Opn->Csd]: xml_get_current_byte_index reports in relation to utf8

From: Date: Tue, 07 Mar 2006 01:17:24 +0000
Subject: #36596 [Opn->Csd]: xml_get_current_byte_index reports in relation to utf8
References: 1  Groups: php.doc 
Request: Send a blank email to phpdoc+get-969372277@lists.php.net to get a copy of this message
ID: 36596 Updated by: vrana@php.net Reported By: preben at infofab dot no -Status: Open +Status: Closed Bug Type: Documentation problem Operating System: Linux FC4 PHP Version: Irrelevant New Comment: This bug has been fixed in the documentation's XML sources. Since the online and downloadable versions of the documentation need some time to get updated, we would like to ask you to be a bit patient. Thank you for the report, and for helping us make our documentation better. "This function returns byte index according to UTF-8 encoded text disregarding if input is in another encoding." Previous Comments: ------------------------------------------------------------------------ [2006-03-03 12:37:34] preben at infofab dot no Sorry, an error in statement - correct version $ch = substr($data, $byte, 7); The "bug" still stands though... ------------------------------------------------------------------------ [2006-03-03 12:37:32] preben at infofab dot no Sorry, an error in statement - correct version $ch = substr($data, $byte, 7); The "bug" still stands though... ------------------------------------------------------------------------ [2006-03-03 00:12:33] preben at infofab dot no Description: ------------ The function xml_get_current_byte_index() returns byte index according to utf8 encoded text - disregarding if input is in ISO-8859-1. If you would like to cach a chunk of data from a xml file you would need to convert input to utf8 to get the correct calculations. Reproduce code: --------------- $data = "<?xml version='1.0' encoding='iso8859-1'?>\n<data>\n<dummy>øææø</dummy>\n<row>ÆØÅdata</row>\n</data>\n"; function startElement($parser, $name, $attrs) { global $data; if($name != "ROW") return; $byte = xml_get_current_byte_index($parser) + 41; $ch = substr($data, $byte + 41, 7); # The following calculates correct # $ch = utf8_decode(substr(utf8_encode($data), $byte, 7)); echo "$name ($byte): $ch\n"; exit(); } function endElement($parser, $name) { } $xml_parser = xml_parser_create(); xml_set_element_handler($xml_parser, "startElement", "endElement"); xml_parse($xml_parser, $data, 1); Expected result: ---------------- ROW (79): ÆØÅd Actual result: -------------- ROW (79): ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=36596&edit=1

« previous php.doc (#969372277) next »