Re: R: About xmldoc and ISO-8859-1...
Patrick Gelin <[email protected]> Wed, 24 Nov 2004 16:52:07 +0100
| Newsgroups | gmane.comp.php.xml-rpc |
|---|---|
| Organization | OSIS |
| Message-ID | <[email protected]> |
Gaetano Giunta wrote: > Sorry, I think you're posting on the wrong mailing list. > This one is for discussing the xmlrpc protocol implementation, not general > XML issues. Anyway, there are some tips below > > bye > Gaetano ok but this tips are really fines for me! >> -----Messaggio originale----- >> Da: [email protected] >> [mailto:[email protected]]Per conto di >> Patrick Gelin >> Inviato: mercoledì 24 novembre 2004 13:09 >> A: [email protected] >> Oggetto: [phpxmlrpc] About xmldoc and ISO-8859-1... >> >> >> Hi, >> >> I'm trying to make DRES project >> (http://sourceforge.net/projects/dres/) >> compliant with ISO-8859-1. I'm not using mbstring into my >> windows 2000 >> server, I know there is problem with Internet Explorer browser... >> >> I saw DRES it use 'xmldoc' API into the file xmlutil.php. >> But this fonction >> seems not to be in use at this time. By the way I can't find any >> documentation about UTF-8, ISO-8859-1 and so about XMLDOM API. >> >> What I saw it's when I save a formula with DRES, it register >> a XML file, and >> the content is: >> >> <?xml version="1.0"?> >> <requirement identifier="aaaaaaaa" name="àààà" >> priority="high" status="draft"><revision date="2004-11-19 13:14:45" >> label=""><author id="gelinp">Patrick >> Gelin</author><comment></comment></revision><description>š >> 69;</descripti >> on></requirement> >> >> The name filed was originaly: >> >> name='àààà' >> >> I don't know if it's UTF-8 or ISO-8859-1 format. >> > > Hard to tell: there is too little context information. > > Where does this xml chunk come from? Is it generated by PHP, taken from a > file, received from the web or what? This xml comes from a PHP script, writing into a XML file and this is the content of the XML file with an ASCII editor. > Is this shown in a browser via HTTP? If so, since the charset is not > specified in the <?xml ?> tag, the charset used has to be specified in the > HTTP headers.Check out the HTTP headers received with your xml page > (install e.g. Mozilla with the LiveHTTPHEADERS plugin or any equivalent > http sniffer / proxy) > > Note: a historical cause of problems is that by the xml spec the xml > charset, where not specified, should be assumed to be UTF-8. But when > sending XML over HTTP, HTTP rules apply, and the default charset depends > on the mime-type used (unless the charset is explicitly defined in the > content-type header or inside the xml chunk itself), and for text/xml it > is ISO-8859-1. Ok, so I would like to set a ISO-8859-1 header but the PHP XML API creating a XML file doesn't let me to parameter this but only XML version (APIs are xmldoc, domxml_new_xmldoc)... This is the PHP code creating the XML file: // retrieves form's submitted data reconstructed into bound document function get_submit($document="", $errors="") { global $HTTP_POST_VARS; if ($document) $doc = xmldoc($document); else $doc = domxml_new_xmldoc("1.0"); // $formdoc = xmldocfile($this->definition); $formdoc = xmldoc(load_file($this->definition)); $formctx = xpath_new_context($formdoc); $result = xpath_eval($formctx, "//field[@binding and (@display = 'edit' or not(@display)) and @control != 'label' and @control != 'readonly']"); foreach ($result->nodeset as $node) { $value = $HTTP_POST_VARS[$node->get_attribute("name")]; if ($node->get_attribute("required") == "true" && !$value) $errors[] = $node->get_attribute("label")." field is required"; if ($node->get_attribute("pattern") && !ereg($node->get_attribute("pattern"), $value)) $errors[] = $node->get_attribute("label")." does not match pattern"; put_xpath($doc, $node->get_attribute("binding"), $value); } /* $root = $formdoc->root(); foreach ($root->children() as $node) if ($node->tagname == "field") put_xpath($doc, $node->get_attribute("binding"), $HTTP_POST_VARS[$node->get_attribute("name")]); */ return $doc->dumpmem(); } I saw dumped could take no documented parameters to select other UTF encoding. So I modified the last line: return $doc->dumpmem(0,"ISO-8859-1"); But... 1. The dumpem warmed... Warning: dumpmem(): output conversion failed due to conv error in D \Inetpub\wwwroot\dres\lib\xmlforms.php on line 112 Warning: dumpmem(): Bytes: 0xE0 0xE0 0xE0 0xE0 in D \Inetpub\wwwroot\dres\lib\xmlforms.php on line 112 Warning: dumpmem(): xmlOutputBufferFlush: encoder error in D \Inetpub\wwwroot\dres\lib\xmlforms.php on line 112 2. The file content was... <?xml version="1.0" encoding="ISO-8859-1"?> <requirement identifier="ࠠࠠࠠࠀ" name="ࠠࠠࠠࠠ" priority="high" status="draft"><revision date="2004-11-24 16:49:31" label=""><author id="gelinp">Patrick Gelin</author><comment></comment></revision><description> 3. It's relaod with Sablotron failed... Warning: Sablotron error on line 2: XML parser error 3: no element found in D:\Inetpub\wwwroot\dres\lib\lib_xslt_internal.php on line 7 What do you think of this?