xml_parse на PHP >= 5.2.4

deepslam

Новичок
xml_parse на PHP >= 5.2.4

Всем привет!

Столкнулся с небольшой проблемкой , на PHP 5.2.4 перестал работать парсер RSS на русских лентах , пишет Invalid Token , суть проблемы я понял - не парсит русские тексты.

Проблему удалось решить , добавив:

PHP:
		if (
		($this->phpversion[0]==5) && 
		($this->phpversion[1]>=2) &&
		($this->phpversion[2]>=4)
		) {
			$data=utf8_encode($data);
		}
Перед тем как парсить данные и

PHP:
		if (
		($this->phpversion[0]==5) && 
		($this->phpversion[1]>=2) &&
		($this->phpversion[2]>=4)
		) {
			$data=utf8_decode(charset_x_win($data));
		}
Когда возвращаем данные.

Эта конструкция успешно заработала на сервере (Linux) , но вот локально тот же код возвращает крякозябры , причем не помогает даже функция charset_x_win и библиотека a.charset , подсмотренной на данном сайте.

Уважаемые гуру , подскажите пожалуйста в чем может быть затык? Наверняка ведь кто то сталкивался с такой проблемкой. По сайту я искал , но ничего путного не нашел.

Спасибо!
 

weregod

unserializer
с php5 XML Parser Functions понимают на входе только "ISO-8859-1", "UTF-8" и "US-ASCII", чем учинили некоторую несовместимость с младшими версиями. а с тем, какие данные Вы возращаете, можете сами разобраться.
 

deepslam

Новичок
Так в том и вопрос , что никак не получается.

utf8_decode нужно применять или нет?
 

weregod

unserializer
внимательно прочитайте описание utf8_decode:

Converts a string with ISO-8859-1 characters encoded with UTF-8 to single-byte ISO-8859-1.

в каком месте у Вас ISO-8859-1?

используйте mb_convert_encoding
 

SiMM

Новичок
> с php5 XML Parser Functions понимают на входе только "ISO-8859-1", "UTF-8" и "US-ASCII"
Имею один хостинг:
PHP Version 5.2.9
FreeBSD 6.3-STABLE
Configure Command './configure' '--with-layout=GNU' '--with-config-file-scan-dir=/usr/local/etc/php' '--disable-all' '--enable-libxml' '--with-libxml-dir=/usr/local' '--enable-reflection' '--program-prefix=' '--disable-cli' '--enable-force-cgi-redirect' '--enable-fastcgi' '--with-apxs2=/usr/local/sbin/apxs' '--with-regex=php' '--with-zend-vm=CALL' '--disable-ipv6' '--prefix=/usr/local' '--mandir=/usr/local/man' '--infodir=/usr/local/info/' '--build=i386-portbld-freebsd6.3'
Server API CGI/FastCGI
XML Support active
XML Namespace Support active
libxml2 Version 2.7.3
где кириллица прекрасно переваривается в xml с заголовком
PHP:
<?xml version="1.0" encoding="windows-1251"?>
и другой хостинг:
PHP Version 5.2.9
Linux
Configure Command './configure' '--enable-bcmath' '--enable-calendar' '--enable-dbase' '--enable-exif' '--enable-force-cgi-redirect' '--enable-ftp' '--enable-gd-native-ttf' '--enable-libxml' '--enable-magic-quotes' '--enable-mbstring' '--enable-pdo=shared' '--enable-safe-mode' '--enable-soap' '--enable-sockets' '--enable-wddx' '--enable-zend-multibyte' '--enable-zip' '--prefix=/usr/local' '--with-apxs=/usr/local/apache/bin/apxs' '--with-bz2' '--with-config-file-path=/usr/local/lib' '--with-config-file-scan-dir=/usr/local/lib/php.ini.d' '--with-curl=/opt/curlssl/' '--with-curlwrappers' '--with-freetype-dir=/usr' '--with-gd' '--with-gettext' '--with-imap=/opt/php_with_imap_client/' '--with-imap-ssl=/usr' '--with-jpeg-dir=/usr' '--with-kerberos' '--with-libdir=lib64' '--with-libexpat-dir=/usr' '--with-libxml-dir=/opt/xml2' '--with-libxml-dir=/opt/xml2/' '--with-mcrypt=/opt/libmcrypt/' '--with-mhash=/opt/mhash/' '--with-mime-magic' '--with-mm=/opt/mm/' '--with-mysql=/usr' '--with-mysql-sock=/var/lib/mysql/mysql.sock' '--with-mysqli=/usr/bin/mysql_config' '--with-pdo-mysql=shared' '--with-pdo-sqlite=shared' '--with-pic' '--with-png-dir=/usr' '--with-pspell' '--with-sqlite=shared' '--with-tidy=/opt/tidy/' '--with-ttf' '--with-xmlrpc' '--with-xpm-dir=/usr' '--with-xsl=/opt/xslt/' '--with-zlib' '--with-zlib-dir=/usr'
Server API Apache
XML Support active
XML Namespace Support active
EXPAT Version expat_1.95.8
Куда копать - непонятно, но переписывать огромный файл в другую кодировку - не хотелось бы.
 

tony2001

TeaM PHPClub
1. libxml2 Version 2.7.3
2. EXPAT Version expat_1.95.8

пусть соберут с libxml, expat - это уже в далёком прошлом, его поддержка осталась только для совместимости.
 

vovanium

Новичок
deepslam
По-моему проверку версии php можно заносить в сборник индусского кода :)
А ты не задумывался как твоя проверка будет работать для PHP 5.3.1? ;)

Преобразуй версию в целое число типа 50204 и проверяй типа
VER_PHP >= 50204
 

vovanium

Новичок
tony2001
да есть такая функция, но имхо удобнее и нагляднее, так
PHP:
if (VER_PHP >= 50204) {...}
чем
PHP:
if (version_compare(PHP_VERSION, '5.2.4', '>=')) {...}
особенно если таких проверок много.
 

SiMM

Новичок
Вообще-то ни второе, ни третье число, чисто теоретически, не ограничено сотней ;)
 

vovanium

Новичок
SiMM
Ну так ключевая фраза "чисто теоретически", а практически даже третье редко десяток переваливает. Вообще это из мускуля перекочивало, у них так условные комментарии записываются, а в мускуле побольше релизов
 
Сверху