У меня проблема с моим генератором PHP php; Я использовал класс XML Creator:
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="Ùاک" album="album1">
когда я изменяю файл XML в блокноте, он также работает на персидском языке, но мой php-класс генерирует неправильную кодировку. tnx за вашу помощь.
Я использовал собственную функцию вместо класса 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).