[PHP/XML] UTF-8 werkt, maar....

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Zoolander
  • Registratie: Januari 2003
  • Laatst online: 23-11-2022

Zoolander

superslim!

Topicstarter
Hallo,

Het lukt me maar niet om valide XML volgens een 'zinnige' manier te maken

Dit de la code in PHP5

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php

// uses standard methods to print results
class XML {
    
    public $db, $table;

    // constructor
    function __construct() {

    }   

    // return an XML document to the XMLHttp caller
    function createXML() {
        
        // create new DOM object
        $dom = new DOMDocument('1.0', 'UTF-8');

        $dom->formatOutput = true;
        $dom->preserveWhiteSpace = false;

        // create root element
        $root = $dom->createElement('rows');
        $root = $dom->appendChild($root);

        // get data
        $query  = "SELECT *
                   FROM ".$this->table;
        $result = $this->db->query($query);
        $nrows  = $this->db->num_rows($result);
        $fields = $this->db->describe($this->table);

        // iterate through the resultset
        while ($row = $this->db->fetch_assoc($result)) {
            
            // create content elements
            $e['row']       = $dom->createElement('row');
            $e['row']       = $root->appendChild($e['row']);

            // create fieldcontent
            foreach ($fields as $value) {
                
                // XML compatible
                $row[$value] = htmlspecialchars($row[$value], ENT_QUOTES, 'UTF-8');
                
                $e[$value]  = $dom->createElement($value, $row[$value]);
                $e[$value]  = $e['row']->appendChild($e[$value]);
            }
        }

        // Somehow, this is needed to have valid XML
        $result = str_replace('UTF-8', 'ISO-8859-1', $dom->saveXML());
        
        // echo the result
        return $result; 
    }
}


En onder: de result met een stringreplace, lijkt de enige goede manier....
Er zitten namelijk tekens als è enzo in.
Ik krijg elke keer een error als ik UTF-8 laat staan. Terwijl dit werkt....
Als ik direct ISO-8859-1 gebruik convert hij alles en is het geen XML meer volgens validators als FF en IE.

Iemand inzicht in dit? Lijkt een bug, maar characterssets zijn best lastig vind ik.

mijn naam slaat nergens op, althans niet op mij :P


Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Mr. Bondt
  • Registratie: Februari 2005
  • Laatst online: 27-08 14:50
Ik ben hier ook mee bezig, en heb ook te verduren gehad met speciale karakters.
Ik had dat opgelost door gewoon $dom = new DOMDocument('1.0', 'UTF-8'); zoals jou neer te zetten.
Verder heb ik _geen_ htmlspecialchars gebruikt, en het werkt prima.
Voorbeeldje (let op: produceert een xml van een halve MB)

[ Voor 5% gewijzigd door Mr. Bondt op 18-03-2006 14:28 ]


Acties:
  • 0 Henk 'm!

  • tech-no-logical
  • Registratie: December 2000
  • Laatst online: 17-09 22:52
ik zorg ervoor dat 't _hele_ proces utf8 is (html input, database, xml en html output), en heb geen enkel probleem met het bouwen van xml uit een database... zit alles wel als utf8 in je table ? indien niet, dan kun je misschien beter de inhoud converteren met iconv dan met html_specialchars...