кодировка в XML(dom xml)

kaiser Zaido

Новичок
кодировка в XML(dom xml)

PHP Version 4.3.10

суть вопроса такая...
я обрабатываю xml документ:
[xml]<?xml version="1.0"?>
<ttest>
<test name="Интегральная математика" num_test="3"></test>
<tquest quest="Что такое интеграл?" numb_answ="3">
<tansw tf="1" ball="1">Это знак такой</tansw>
<tansw tf="0" ball="0">Это система исчисления</tansw>
<tansw tf="0" ball="0">Это пятка зулуса</tansw>
</tquest>
[skipped]
<tresult result="1">Непрошел тест</tresult>
<tresult result="3">Прошел тест</tresult>
</ttest>[/xml]

обрабатываю таким кодом:
PHP:
<?php
$qu=array();
$ans=array();
$tres=array();
$test=array();

$xml = join('',file('integr.xml'));
$xml = xmldoc($xml);

$root = $xml->root();
$nodes = $root->children();
foreach($nodes as $node)
{
    if ($node->tagname=='test')
    {
            echo $test['name']=$node->get_attribute('name');
            echo $test['num_test']=$node->get_attribute('num_test');
    }

    if ($node->tagname=='tquest')
    {

        $tquest = array();

        $tquest['quest'] = $node->get_attribute('quest');
        $tquest['numb_answ'] = $node->get_attribute('numb_answ');

        $answer = $node->children();
        foreach($answer as $answ)
        {
            if (($answ->type==XML_ELEMENT_NODE))
             {
               $answers['tf']=$answ->get_attribute('tf');
               $answers['ball']=$answ->get_attribute('ball');
               $answers['tans'] = $answ->get_content();

                $ans[]=$answers;
             }
        };
        $qu[] = $tquest;
    };
    $tresult=array();
    if ($node->tagname=='tresult')
    {
      $tresult['result']=$node->get_attribute('result');
      $tresult['result_text']=$node->get_content();
      $tres[]=$tresult;
    }
};

print_r($qu); echo "<br><br><br>";
print_r($ans);echo "<br><br><br>";
print_r($tres);echo "<br><br><br>";
print_r($test);echo "<br><br><br>";
?>
на выходе получаю вот что:
Р&#65533;нтегральная математика3Array ( [0] => Array ( [quest] => Что такое интеграл? [numb_answ] => 3 ) [skipped])


Количество ответов: 15 [very skipped]
как все видят кодировка оставляет желать лучшего :) А мне ведь с этими данными предстоит работать. Я думал что это не сыграет роли и пихнул все в mysql, как и предпологалось :) НО там обнаружил такиеже символы. + из-за своего синтаксиса некоторые выражения не позволяют себя удалить из бд стандартными путями(через пхпмайадмин).
первой приходит мысль сказать кодировку в самом XML документе, но когда я пишу там <?xml version="1.0" encoding="windows-1251" ?>, то сервер выдает мне в ответ Fatal error: Call to a member function on a non-object in z:\home\zaido1.net\www\test\xml.php on line 14

значит xml dom не привык работать с объявленной кодировкой :(

подскажите плз как быть, были ли у кого-то такиеже проблемы...
 

[DAN]

Старожил PHPClub
>первой приходит мысль сказать кодировку в самом XML документе
весьма правильная мысль. Впредь так и стоит поступать.

>как быть
включать поддержку iconv

И еще, очень рекомендую прочитаться по форуму. Тема всплывает с завидной регулярностью.
 

kaiser Zaido

Новичок
2neko
проблема есть :) ведь налицо возможность не прочитать текст.

2[DAN]
а как с помощью iconv решить эту проблему??
как я понял из хелпа по пхп, то нужно сделать что-то такое...

PHP:
iconv_set_encoding("internal_encoding", "UTF-8");
iconv_set_encoding("output_encoding", "windows-1251");
но к сожалению на выходе я имею тоже самое что и раньше :)) я имею предположение, что пихать в БД следует хорошие данные - данные в windows-1251, а не в UTF-8(как я уже говорил, такие данные даже удалить проблема :))...
подскажи плз...

-~{}~ 17.03.05 20:32:

пользуясь суперсознанием Земли я пришел к выводу что делать надо так:
PHP:
 iconv("UTF-8","windows-1251" , $test['name']);
 

sokol

Zavolga.Net
kaiser Zaido
При включенном iconv [--with-iconv] xml файл должен быть использован в указанной в нем кодировке автоматически. Чистое предположение, но при использовании Sablotron именно так и происходит.
 
Сверху