0

PHP XML ジェネレーター クラスに問題があります。私はXMLクリエータークラスを使用しました:

class _XmlWriter {

var $xml;
var $indent;
var $stack = array();

function _XmlWriter($indent = '  ') {
    $this->indent = $indent;
    $this->xml = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
}

function _indent() {
    for ($i = 0, $j = count($this->stack); $i < $j; $i++) {
        $this->xml .= $this->indent;
    }
}

function push($element, $attributes = array()) {
    $this->_indent();
    $this->xml .= '<' . $element;
    foreach ($attributes as $key => $value) {
        $this->xml .= ' ' . $key . '="' . htmlentities($value) . '"';
    }
    $this->xml .= ">\n";
    $this->stack[] = $element;
}

function element($element, $content, $attributes = array()) {
    $this->_indent();
    $this->xml .= '<' . $element;
    foreach ($attributes as $key => $value) {
        $this->xml .= ' ' . $key . '="' . htmlentities($value) . '"';
    }
    $this->xml .= '>' . htmlentities($content) . '</' . $element . '>' . "\n";
}

function emptyelement($element, $attributes = array()) {
    $this->_indent();
    $this->xml .= '<' . $element;
    foreach ($attributes as $key => $value) {
        $this->xml .= ' ' . $key . '="' . htmlentities($value) . '"';
    }
    $this->xml .= " />\n";
}

function pop() {
    $element = array_pop($this->stack);
    $this->_indent();
    $this->xml .= "</$element>\n";
}

function getXml() {
    return $this->xml;
}

function create($root, $array) {
    $xml = new _XmlWriter();
    $xml->push($root);
    foreach ($array as $record) {
        $xml->push('music', array('name' => $record[0],
            'artist' => $record[1],
            'album' => $record[2]));
        $xml->pop();
    }
    $xml->pop();
    return $xml->getXml();
}
}
?>

XML ファイルを生成しますが、ペルシア語またはアラビア語のエンコードはサポートしていません。

XML Parsing Error: not well-formed
Line Number 3, Column 98:  
<music name="name1" artist="&Ugrave;&Oslash;&sect;&Uacute;&copy;" album="album1">

メモ帳で XML ファイルを変更すると、ペルシア語でも機能しますが、私の php クラスは正しくないエンコーディングを生成します。あなたの助けのためのtnx。

4

1 に答える 1

1

私は xml_writer クラスの代わりに自分で書いた関数を使用しました:

function xml_generator($root, $tag_array, $att_array, $val_array) {
    $xml_str = '<?xml version="1.0" encoding="UTF-8"?>' . "\n";
    $xml_str .= '<' . $root . '>' . "\n";
    for ($i = 0; $i < sizeof($val_array); $i++) {
        $xml_str .= '<' . $tag_array[$i] . ' ';
        for ($j = 0; $j < sizeof($att_array); $j++) {
            $xml_str .= $att_array[$j] . '="' . $val_array[$i][$j] . '" ';
        }
        $xml_str .= '>' . '</' . $tag_array[$i] . '>' . "\n";
    }
    $xml_str .= '</' . $root . '>';
    return $xml_str;
}

Unicode(UTF-8)に対応しました。

于 2012-05-25T22:39:41.253 に答える