php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #31994 output conversion failed due to conv error
Submitted: 2005-02-16 10:06 UTC Modified: 2005-04-17 01:00 UTC
Votes:38
Avg. Score:4.1 ± 1.0
Reproduced:31 of 32 (96.9%)
Same Version:10 (32.3%)
Same OS:5 (16.1%)
From: misnet at hotmail dot com Assigned:
Status: No Feedback Package: XSLT related
PHP Version: 5CVS-2005-02-25 OS: windows 2003 server
Private report: No CVE-ID: None
 [2005-02-16 10:06 UTC] misnet at hotmail dot com
Description:
------------
a.xml
=============================================
<?xml version="1.0" encoding="GB2312"?>
<Article>
  <Title>test</Title>
  <Author>ehero</Author>
  <ComeFrom>?ะน?</ComeFrom>
  <HtmlUrl>a.html</HtmlUrl>
  <CatalogId>2</CatalogId>
  <Contents><![CDATA[????]]></Contents>
  <AddTime>2005??</AddTime>
  <UpdateTime></UpdateTime>
  <Hits>3</Hits>
  <ServerFile></ServerFile>
  <LocalFile></LocalFile>
  <EncodeLocalFile></EncodeLocalFile>
  <PageIndex>0</PageIndex>
  <TotalPageNum>1</TotalPageNum>
  <PageUrl>a.shtml</PageUrl>
</Article>
=============================================
cms.xsl:
=============================================
<?xml version="1.0" encoding="GB2312" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:php="http://php.net/xsl" xsl:extension-element-prefixes="php">
<xsl:output method="html" encoding="GB2312" indent="yes"/>
<xsl:template match="/">
<html>
.....
=============================================
s.php:
=============================================
<?php
$xml = new DOMDocument("1.0","GB2312");
$xml->load("a.xml");
$xsl = new DOMDocument("1.0","GB2312");
$xsl->load("cms.xsl");
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl);
$proc->registerPHPFunctions();
$d = $proc->transformToUri($xml,"s.xml");
?>
=============================================
When I run s.php, it will be wrong!.Below is the exception messages.

Warning: output conversion failed due to conv error in D:\myphp\yibo\t.php on line 9

Warning: Bytes: 0xB5 0xEB 0x2D 0x3C in D:\myphp\yibo\t.php on line 9

I have tested $xml->load("a.xml") and $xsl->load("cms.xsl"),they are right. I can get $xml->saveXML() and $xsl->saveXML().


Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2005-02-25 14:38 UTC] sniper@php.net
Please try using this CVS snapshot:

  http://snaps.php.net/php5-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php5-win32-latest.zip


 [2005-02-26 06:41 UTC] misnet at hotmail dot com
Not be resolved! The same result.
 [2005-03-28 04:43 UTC] misnet at hotmail dot com
What about the bug? Can it not be resolved?
 [2005-04-07 11:43 UTC] emil at wayers dot com
This error/problem resolves around your used encoding type. when using encoding="GB2312" in php5.0.4/cvs-current the engine will issue a warning at the exact point a charcter has been found which isn't suitable for this encoding context.

My script, which is similar to the given script, issued the exact same warning on a character (?) when using the standard iso encoding. After I changed my encoding to UTF-8 all reported problems where gone.

I'm sure this isn't a real engine f*ck up but just a misguided error message ;) But if this workaround doesn't work for you try changing your Article->ComeFrom & Article->Contents & Article->AddTime content into htmlentities.

good luck!
 [2005-04-09 08:27 UTC] cbdbs at yahoo dot com
$doc = new DOMDocument('1.0','ISO-8859-1');
// we want a nice output
$doc->formatOutput = true;


$familias = $doc->appendChild(new DOMElement('familias'));

 while ($fam_datos = mysql_fetch_array($data)){

		$familia = $familias->appendChild(new DOMElement('familia'));
		$familia->appendChild(new DOMElement('Apellidos', $fam_datos['Familia']));
		$familia->appendChild(new DOMElement('Representante', $fam_datos['Apellidos']));
 		$familia->appendChild(new DOMElement('Nombre', $fam_datos['Nombres']));
 		$familia->appendChild(new DOMElement('Edad', $fam_datos['Edad']));
		$familia->appendChild(new DOMElement('Salud', 'Sano'));

 }

header('Content-Type: text/xml');
$documento = $doc->saveXML();
echo $documento;

OUTPUT
<b>Warning</b>:  output conversion failed due to conv error in <b>c:\home\prueba\www\grid\xml.php</b>...
 [2005-04-09 17:34 UTC] derick@php.net
You're probably using a character which can not be represented in iso-8859-1... but I don't know for sure as I don't have the data. Come up with a *self-contained* script that does not rely on a database...
 [2005-04-17 01:00 UTC] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
 [2007-04-26 21:40 UTC] scott at realorganized dot com
Here's some example code that shows the problem:

<?
  header("Content-Type: text/html; charset=iso-8859-1");
  error_reporting(E_ALL);
  $domfather = new domDocument('1.0', 'iso-8859-1');
  $node = $domfather->createElement("xxx", chr(200));
  $domfather->appendChild($node);
  echo "<pre>";
  echo htmlspecialchars($domfather->saveXML());
  $nodelist =  $domfather->getElementsByTagName("xxx");
  $data = $nodelist->item(0)->nodeValue;
  echo $data;
  echo strlen($data);
?>

Character code 200 is an e grave and is a valid iso-8859-1 
character.  The output from my server is below.  When I retrieve 
the node's data back, it is as expected.  But it's the saveXML() 
code that seems to have a problem. I suspect the problem is with 
the utf-8 -> iso-8859 conversion before output.


Warning:  DOMDocument::saveXML() [function.DOMDocument-saveXML]: 
output conversion failed due to conv error in /Library/Tenon/
WebServer/WebSites/realtyjuggler.com/subscription/test.php on line 
23


Warning:  DOMDocument::saveXML() [function.DOMDocument-saveXML]: 
Bytes: 0xC8 0x3C 0x2F 0x78 in /Library/Tenon/WebServer/WebSites/
realtyjuggler.com/subscription/test.php on line 23

<?xml version="1.0" encoding="iso-8859-1"?>
<xxx>?1
 [2007-05-20 17:02 UTC] bonsite at hotmail dot com
This is not a PHP error. You must use utf8_encode() when you use characters like ?, ?, ...
 [2012-11-26 16:46 UTC] michal dot vrchota at gmail dot com
Check if You are not using binary unsafe functions. I was calling substr() instead 
of mb_substr() which broke the utf8 encoding.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Oct 31 23:01:28 2024 UTC