#36415 [NEW]: transformToXML will NOT output UTF-8

From: Date: Thu, 16 Feb 2006 11:59:44 +0000
Subject: #36415 [NEW]: transformToXML will NOT output UTF-8
Groups: php.bugs 
Request: Send a blank email to php-bugs+get-93328@lists.php.net to get a copy of this message
From: memoimyself at yahoo dot com dot br Operating system: Windows XP PHP version: 5.1.2 PHP Bug Type: XSLT related Bug description: transformToXML will NOT output UTF-8 Description: ------------ An instance of the XSLTProcessor class, via its transformToXML method, is used to transform XML documents using an XSL stylesheet. The XSL document is in a file that is encoded in UTF-8. The PHP script is in a file also encoded in UTF-8. The XML documents are created at run time from XML strings stored in a MySQL 5 database whose character set is UTF-8 and whose tables all have UTF-8 as their character set as well. All the XML strings stored in the database are duly encoded in UTF-8. Prior to data retrieval, a 'SET NAMES "utf8"' query is run to ensure that all i/o operations use the UTF-8 character set. Upon transformation, the results are output to the client preceded by "header('Content-Type: text/html; charset=UTF-8')" to ensure that the browser uses the correct character set. The XSL file has the following top-level (child node of the document element, as it should be) element: <xsl:output encoding="utf-8" method="html"/> When this code is run on a Windows server (Win XP, Apache 2.0.55,PHP 5.1.2), the transformation NEVER outputs UTF-8 text (seems to output iso-8859-1), even if the 'method' attribute in the above element is changed to 'xml', and even if a 'media-type' attribute is also used. When run on a Linux server (also running PHP 5.1.2), the transformation runs as expected and outputs proper UTF-8 text to the browser. Reproduce code: --------------- PHP code: $dbo = new PDO(BD_DSN, BD_USERNAME, BD_PWD); $dbo->query('SET NAMES "utf8"'); $sql = 'SELECT Report FROM reports WHERE Id = '.$dbo->quote(strip_gpc_slashes($_GET['rid'])).' AND Author = '.$dbo->quote($_SESSION['user']); $result = $dbo->query($sql); $row = $result->fetch(PDO::FETCH_OBJ); $xml = new DOMDocument('1.0', 'UTF-8'); $xml->loadXML($row->Report); $xsl = new DOMDocument('1.0', 'UTF-8'); $xsl->load('/path/to/xsl/file.xsl'); $proc = new XSLTProcessor; $proc->importStyleSheet($xsl); $output = $proc->transformToXML($xml); header('Content-Type: text/html; charset=utf-8'); print $output; Start of XSL document: <?xml version="1.0" encoding="utf-8"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2005/11/schema-for-xslt20.xsd"> <xsl:output encoding="utf-8" method="html"/> <xsl:template match="/">... Expected result: ---------------- All text output to the browser should be proper UTF-8. If the browser's character encoding is set to UTF-8 (which it should, with the "content-type" header above), all accented character should be adequately displayed. Actual result: -------------- When the code is run on a Windows XP server, the text output to the browser is NOT proper UTF-8 and all accented characters are replaced by weird symbols. When the code is run on a Linux server (also equipped with PHP 5.1.2), everything works as expected and the output is proper UTF-8. -- Edit bug report at http://bugs.php.net/?id=36415&edit=1 -- Try a CVS snapshot (PHP 4.4): http://bugs.php.net/fix.php?id=36415&r=trysnapshot44 Try a CVS snapshot (PHP 5.1): http://bugs.php.net/fix.php?id=36415&r=trysnapshot51 Try a CVS snapshot (PHP 6.0): http://bugs.php.net/fix.php?id=36415&r=trysnapshot60 Fixed in CVS: http://bugs.php.net/fix.php?id=36415&r=fixedcvs Fixed in release: http://bugs.php.net/fix.php?id=36415&r=alreadyfixed Need backtrace: http://bugs.php.net/fix.php?id=36415&r=needtrace Need Reproduce Script: http://bugs.php.net/fix.php?id=36415&r=needscript Try newer version: http://bugs.php.net/fix.php?id=36415&r=oldversion Not developer issue: http://bugs.php.net/fix.php?id=36415&r=support Expected behavior: http://bugs.php.net/fix.php?id=36415&r=notwrong Not enough info: http://bugs.php.net/fix.php?id=36415&r=notenoughinfo Submitted twice: http://bugs.php.net/fix.php?id=36415&r=submittedtwice register_globals: http://bugs.php.net/fix.php?id=36415&r=globals PHP 3 support discontinued: http://bugs.php.net/fix.php?id=36415&r=php3 Daylight Savings: http://bugs.php.net/fix.php?id=36415&r=dst IIS Stability: http://bugs.php.net/fix.php?id=36415&r=isapi Install GNU Sed: http://bugs.php.net/fix.php?id=36415&r=gnused Floating point limitations: http://bugs.php.net/fix.php?id=36415&r=float No Zend Extensions: http://bugs.php.net/fix.php?id=36415&r=nozend MySQL Configuration Error: http://bugs.php.net/fix.php?id=36415&r=mysqlcfg

« previous php.bugs (#93328) next »