парсер xml файла и русский язык

php xml парсер

При разборе такого xml файла:
<?xml version="1.0" encoding="windows-1251" ?>
<list>
<sort id="g1">
<sortName>Имя</sortName>
<clas>Д</clas>
<diameter>15</diameter>
<height>140</height>
<color>Цвет</color>
</sort>
</list>
русские слова получаются примерно такие ДДДДДДДД
парсер использую такой:
class Content_Handler{

private $currentElement = "";

private $sortName = "";
private $clas = "";
private $diameter = "";
private $height = "";
private $color = "";

function start_element($parser, $name, $attrs){

if ($name == "list"){
echo "<table width='100%'><tr>".
"<td><h1>Название</h1></td>
<td><h1>Класс</h1></td>".
"<td><h1>Диаметр</h1></td>
<td><h1>Высота куста</h1></td>
<td><h1>Окраска</h1></td></tr>";
}


$this->currentElement = $name;

}

function end_element($parser, $name){

if ($name == "list"){
echo "</table>";
}

if ($name == "sort"){
echo "<tr><td>".$this->sortName."</td>".
"<td>".$this->clas."</td>".
"<td>".$this->diameter."</td>".
"<td>".$this->height."</td>".
"<td>".$this->color."</td></tr>";

$this->sortName = "";
$this->cals = "";
$this->diameter = "";
$this->height = "";
$this->color = "";

}

$this->currentElement = "";

}


function chars($parser, $chars){
if ($this->currentElement == "sortName"){
$this->sortName = $this->sortName . $chars;
}
if ($this->currentElement == "clas"){
$this->clas = $this->clas . $chars;
}
if ($this->currentElement == "diameter"){
$this->diameter = $this->diameter . $chars . cm;
}
if ($this->currentElement == "height"){
$this->height = $this->height . $chars . cm;
}
if ($this->currentElement == "color"){
$this->color = $this->color . $chars;
}

}
}

function display(){

$handler = new Content_Handler();

$doc_parser = xml_parser_create();

xml_set_object($doc_parser, $handler);

xml_set_element_handler($doc_parser,
"start_element",
"end_element");
xml_set_character_data_handler($doc_parser, "chars");

xml_parser_set_option($doc_parser,
XML_OPTION_CASE_FOLDING, 0);

$xmlfile = "g.xml";

$file_to_parse = fopen($xmlfile, "r");
if (!$file_to_parse) die("Can't open XML file.");

while($data = fread($file_to_parse, 4096)){
xml_parse($doc_parser, $data, feof($file_to_parse));
}
}
Пытался добавить в код header('Content-type: text/html; charset=windows-1251'); но не помогает, возможно не там добавлял.
Подскажите, где нужно добавить код?
Ответы:
Такая ошибка обычно возникает, когда XMLReader использует локаль, которая отличается от той, в которой генерировался файл, в результате мы получаем такую абра кодабру Юникодную, используйте адаптер (можете сами его написать), который будет проверять локаль в которой ей подается файл и конвертировать все, что вы читаете в ту локаль, которая вам нужна.
DeadShot, можно поконкретней?
Заработало, использую mb_convert_encoding (string str, string to-encoding [, mixed from-encoding]).
Всем спасибо =)


17 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.