Проблема с загрузкой XML

AffMaster

Новичок
Проблема с загрузкой XML

Здравствуйте, помогите пожалуйста решить такую проблему: после того, как хостер перенес аккаунт на другой сервер, возникла проблема с загрузкой XML в PHP. Функция xml_parse выдает ошибку: not well-formed (invalid token). Ошибка возникает на любых xml-документах в кодировке windows-1251 на первой по порядку строке, содержащей русские буквы. Сам документ сформирован правильно, кодировка в документе указана. Проблема именно в некорректной обработке русских символов. До переноса на новый сервер тот же скрипт с теми же документами работал. На других хостингах тоже работает. Проблема именно в каких-то настройках сервера. Поддержка хостинга решить проблему не может.
Подскажите пожалуйста что сказать поддержке хостинга чтобы они решили проблему или как обойти ее самому?
Версия PHP 5.2.6.
 

slach

Новичок
посмотрите как собран libxml2 с поддержкой iconv или без?

короче надо iconv поставить и собрать libxml2 с поддержкой iconv
 

AffMaster

Новичок
А как посмотреть собран ли libxml2 с поддержкой iconv?

Могу сказать только, что в phpinfo libxml2 вообще не упоминается, iconv установлен.
 

FB3

Новичок
Стоп, а xml_parse разве относится к libxml?
http://ru.php.net/manual/ru/intro.xml.php - здесь написано, что win-1251 не поддерживается.
На следующих страницах описана установка и настройка.
 

Cron

Новичок
Блин, такая же проблема. Слово в слово. Локально тоже были проблемы. Прописал iconv - помогло.

PHP:
function saxCharacterData($parser,$data){
global $currentNews,$index, $head, $buf;

$data=iconv("UTF-8", "windows-1251",$data);
...
Сейчас же эта строка никак не влияет. Ругается на первый же русский символ.
 

slach

Новичок
http://ru.php.net/manual/ru/function.xml-parser-create.php

resource xml_parser_create ([ string $encoding ] )

xml_parser_create() creates a new XML parser and returns a resource handle referencing it to be used by the other XML functions.
Список параметров

encoding

The optional encoding specifies the character encoding for the input/output in PHP 4. Starting from PHP 5, the input encoding is automatically detected, so that the encoding parameter specifies only the output encoding. In PHP 4, the default output encoding is the same as the input charset. If empty string is passed, the parser attempts to identify which encoding the document is encoded in by looking at the heading 3 or 4 bytes. In PHP 5.0.0 and 5.0.1, the default output charset is ISO-8859-1, while in PHP 5.0.2 and upper is UTF-8. The supported encodings are ISO-8859-1, UTF-8 and US-ASCII.

что переводится так
скомпилируйте libxml с поддержкой iconv
и тогда при создании sax парсера
у вас НОРМАЛЬНО будет детектится кодировка

кстати, автору топика, а у вас декларация <?xml version="1.0" encoding="windows-1251"?> прописана?

ВСЕ что сейчас в php5 для XML стандартное сделано поверх libxml
в php4 SAX парсинг был через expat

-~{}~ 19.08.08 12:20:

хотя конечно я тут могу и гнать по черному
я cp1251 уже года три как не использую в своих проектах

так что сходу не смогу сказать
но когда то в php5 у меня получалось парсить cp1251 через SAX
точно помню
 

Cron

Новичок
Изначально использовать UTF-8 было бы, конечно, лучше, но у меня xml-файлы генерят юзеры, и генерить их в 1251 им явно проще.

В общем, у меня получилось так:

PHP:
...
$xml=iconv("windows-1251", "UTF-8",$xml);

if (!xml_parse($parser,$xml,true))
...

function saxCharacterData($parser,$data){
$data=iconv("UTF-8", "windows-1251",$data);
...
 

AffMaster

Новичок
Я конечно понимаю, что можно каждый раз перекодировать файл в utf-8, но хотелось бы решить проблему настройками сервера. Тем более что обычно в php5 не возникает такой проблемы.
Декларация <?xml version="1.0" encoding="windows-1251"?> у меня в xml конечно прописана, и тот же самый файл на другом сервере с php5 прекрасно парсится тем же самым скриптом.
У меня есть вопрос к знающим людям: как понять какой парсер используется? Глядя вот на это описание модуля xml в phpinfo:
xml
XML Support active
XML Namespace Support active
EXPAT Version expat_1.95.8
у меня закрадывается подозрение что на сервере используется EXPAT несмотря на то что это php5, а не php4. Я прав или нет?
 

slach

Новичок
да правильно понимаешь

должно быть чтото типа

----------------------------------------------
xml
----------------------------------------------
XML Support active
XML Namespace Support active
libxml2 Version 2.6.27

-~{}~ 19.08.08 18:55:

скорее всего у тебя php собран с параметром
--with-expat-dir

а надо

--enable-xml
--enable-libxml
 
Сверху