Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > Не изменяется кодировка в XML


Автор: DimaSiK 8.8.2007, 22:11
Не могу изменить кодировку XML документа хоть убей. Изначально ее определяю, когда создаю новый dom объект:
Код

$dom_obj = new domDocument('1.0','windows-1251');

потом устанавливаю ее принудительно через свойство:
Код

#$dom_obj->encoding='windows-1251'

далее производим добовление элементов в объект и выводим его на экран echo $dom_obj->saveXML() и постоянно видим кодировку отличную от устанавливаемой, а именно utf-8. Подкиньте совет, в чем дело??

Автор: WolfON 8.8.2007, 22:16
Вы указываете кодировку в которой документ записан.
А внутреннее его представление хранится в юникоде.

Автор: DimaSiK 8.8.2007, 22:22
Цитата(WolfON @ 8.8.2007,  22:16)
Вы указываете кодировку в которой документ записан.
А внутреннее его представление хранится в юникоде.

я в дерево русский текст записываю через iconv('windows-1251', 'utf-8',$string), вроде бы все хорошо, но теперь как мне его верно отобразить????

Автор: WolfON 8.8.2007, 22:30
а почему-бы не iconv('utf-8','windows-1251',$element); ? smile

Автор: DimaSiK 8.8.2007, 22:34
Цитата(WolfON @ 8.8.2007,  22:30)
а почему-бы не iconv('utf-8','windows-1251',$element); ? smile

интересно знать, в какой момент это делать????, в момент вывода или же в момент формирования объекта. Если в момент вормирования объекта, то первый параметр функции iconv это есть кодировка из которой преабразуем, второй - кодировка в которую преобразуем, не так ли??

Автор: Golda 9.8.2007, 14:31
В момент вывода

Автор: DimaSiK 9.8.2007, 21:32
Цитата(Golda @ 9.8.2007,  14:31)
В момент вывода

уже разобрался =)

Автор: DimaSiK 9.8.2007, 21:52
Кстати еще такой вопрос, какие функции используются имеено в 5 PHP для склейки xml и xls шаблонов?

Автор: DimaSiK 9.8.2007, 22:18
Цитата(Golda @ 9.8.2007,  14:31)
В момент вывода

У меня к тебе такой вопрос, вот есть часть кода, где в $this->xml_doc хранится сформированный динамически XML объект, далее как видишь я соединяю xsl шаблон и xml и вывожу на экран, но на эране ничего не появляется. Если же посмотреть исходый код пустоты, то там в се есть, только оно не отоюражается и все, в чем дело понять не могу =(((((((, може что посоветуешь?
 
Код

$xsl = new DomDocument();
    $xsl->load($file);
    
    $proc = new XsltProcessor();
    $proc->registerPhpFunctions();

    // Load the documents and process using $xslt
    $xsl = $proc->importStylesheet($xsl);

    /* transform and output the xml document */
    $newdom = $proc->transformToDoc($this->xml_doc);

    print $newdom->saveXML();



Автор: Golda 10.8.2007, 13:42
И наверняка в других броузерах отображается нормально. Встречалась с такой проблемой, но пока не разобралась в чем дело. Были какие-то пляски с бубном. Типа скопировать в другой файл, пересохранить, поудалять/повставлять переводы строк, пока не заработает. Наверняка какие-то проблемы в кодировке, типа BOM в UTF-8, который неодназначно воспринимается разными программными средствами. К сожалению, помочь не могу. Давно не сталкивалась с такой ситуацией. Если пляски с бубном не помогут, выкладывайте файлы сюда, будем разбираться.

Автор: DimaSiK 11.8.2007, 18:39
Цитата(Golda @ 10.8.2007,  13:42)
И наверняка в других броузерах отображается нормально. Встречалась с такой проблемой, но пока не разобралась в чем дело. Были какие-то пляски с бубном. Типа скопировать в другой файл, пересохранить, поудалять/повставлять переводы строк, пока не заработает. Наверняка какие-то проблемы в кодировке, типа BOM в UTF-8, который неодназначно воспринимается разными программными средствами. К сожалению, помочь не могу. Давно не сталкивалась с такой ситуацией. Если пляски с бубном не помогут, выкладывайте файлы сюда, будем разбираться.

Вроде бы разобрался, хотя пока не понял из-за чего такое может быть. Дело в том, что в xsl файле в секции где описывается javascript, тоесть <javascript></javascript> при склейке куда-то выпадал и выпадает закрывающийся тег </javascript>. Если например прописать какую-нибудь функцию, даже пустую в секции <javascript></javascript>, то закрывающийся тег не пропадает и все отлично, а так просто исчезает  и поэтому страница не отображается, хотя имеется в наличии.

Автор: Golda 12.8.2007, 08:46
Пустой <javascript>? Возможно, дело в данном случае в том, что  реально процессор обрабатывает не текст XSL и XML, а их преставление в виде структуры в памяти (скорее всего DOM). И в таком представлении теряется информация о том, был описан тег, не содержащий дочерних элементов, как  <tag></tag>  или <tag/>. В результате при преобразовании в текстовое представление, получаем <tag/>, т.е. в данном случае <javascript/>. А поскольку аттрибута src он не содержит, броузер и дал сбой

Автор: DimaSiK 13.8.2007, 20:22
Цитата(Golda @ 12.8.2007,  08:46)
Пустой <javascript>? Возможно, дело в данном случае в том, что  реально процессор обрабатывает не текст XSL и XML, а их преставление в виде структуры в памяти (скорее всего DOM). И в таком представлении теряется информация о том, был описан тег, не содержащий дочерних элементов, как  <tag></tag>  или <tag/>. В результате при преобразовании в текстовое представление, получаем <tag/>, т.е. в данном случае <javascript/>. А поскольку аттрибута src он не содержит, броузер и дал сбой

Да, так и есть, обрабатывается DOM smile , как в этом случае быть??

Автор: Golda 14.8.2007, 11:43
Можете попробовать запретить сокращунную запись тега

Код

echo $dom->saveXML(null, LIBXML_NOEMPTYTAG);
 

Но это подействует на все теги, т.е. Вы получите также <img..></img> например. На мой взгляд лучше просто сделать <javascript> непустым, добавив в него, например, html комментарий. В xsl для этого можно использовать tag <xsl:comment>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)