Warning: Sablotron error on line none: unknown encoding 'Windows-1251'

DiMA

php.spb.ru
Команда форума
Warning: Sablotron error on line none: unknown encoding 'Windows-1251'

Как профиксить эту проблему?
возникает тут:
$out=xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);

На сервере стоит 2 апача - старый и новый. На старом это работает. На новом - нет. Компили его так:

./configure
--with-xslt-sablot=/usr/local/sablot_new
--enable-xslt
--with-iconv=/usr/local/iconv_new

php 4.3.1
sablotron 0.97
expat 1.95.5
libiconv 1.7
 

DiMA

php.spb.ru
Команда форума
Это из-за того, что в файлах написано:

<?xml version='1.0' encoding='windows-1251'?>
<xsl:stylesheet version="1.0" xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<xsl:eek:utput method="html" indent='yes' encoding="windows-1251"/>


Если заменить windows-1251 на ISO-8859-1, то работает (но читать нельзя - иегорлифы). Ничего, кроме ISO-8859-1,2,3 и UTF-8 оно не понимает. Даже koi8-r.
 

[DAN]

Старожил PHPClub
Скорее всего сам sablotron компилировался без iconv. Поэтому парсер не понимает других кодировок.
Попробуй перекомпилить sablotron --with-iconv.

Далее. Если возникнут проблемы с парсингом, попробуй делать так:
PHP:
        $xh = xslt_create(); 
        $args = array ( 
            '/_xml' => $xml, 
            '/_xsl' => $xslt 
        ); 
        $result = xslt_process ( $xh, 'arg:/_xml', 'arg:/_xsl', NULL, $args)
            xslt_free ( $xh);
где $xml - данные, $xslt - шаблон.
 

DiMA

php.spb.ru
Команда форума
Пробовал версии саблатрона 0.96, 0.97, 0.98, все компились с --with-iconv=путь и --with-expat=путь. В путях компиленные версии expat & iconv. Пробовал версии iconv 1.7, 1.8. Пробовал компилить саблотрон без пути "--with-iconv", чтобы бралось по умолчанию откуда-то. Всего раз 20 все перекомпилял с разными версиями.

phpinfo():

iconv
iconv support enabled
iconv implementation libiconv
iconv library version 1.8

xml
XML Support active
XML Namespace Support active
EXPAT Version 1.95.2

xslt
XSLT support enabled
Backend Sablotron
Sablotron Version 0.97
Sablotron Information Cflags: -g -O2 -I/usr/local/expat_new/include -I/usr/local/include Libs: -L/usr/local/sablot_new/lib -liconv -lexpat Prefix: /usr/local/sablot_new


Мой документ:
<?xml version='1.0' encoding='кодировка1'?>
<xsl:stylesheet version="1.0" xmlns:xsl='http://www.w3.org/1999/XSL/Transform'>
<!--xsl:eek:utput method="html" indent='no'/-->
<xsl:eek:utput method="text" indent='yes' encoding="кодировка2"/>

На месте кодировки1 подходит: windows-1250, UTF-8, ISO-8859-1, ISO-8859-2, ISO-8859-3. На месте кодировки2 не подходит вообще ничего, кроме UTF-8 (или удаления этого параметра).

Пробовал искать по диску файлы, в которых упоминается
'windows-1250', но не упоминается 'windows-1251'. Особо это ничего не дало (в саблатроне только 'windows-1250' есть, а iconv сам по себе отлично работает).
 

[DAN]

Старожил PHPClub
Попробуй, эаработает у тебя такой пример:
http://dan.phpclub.net/sablot/index.php

сырцы:
http://dan.phpclub.net/sablot/index.phps
http://dan.phpclub.net/sablot/yyy.xml
http://dan.phpclub.net/sablot/yyy.xsl

Должно выдать qwe qwe qwe qwe в браузере.
У меня этот пример работает везде (и под ХР, и на сервере клуба).

Pphinfo под ХР:

iconv
iconv support enabled
iconv implementation libiconv
iconv library version 1.8

xml
XML Support active
XML Namespace Support active
EXPAT Version 1.95.2

xslt
XSLT support enabled
Backend Sablotron
Sablotron Version 0.97
 

DiMA

php.spb.ru
Команда форума
Warning: Sablotron error on line 1: XML parser error 2: syntax error in xmltest.php on line 14 (строка с $result = xslt_process). Пробовал заменить 'windows-1251' на 'UTF-8', по прежнему ошибка синтаксиса на строке 1, т.е. проблема даже не в кодировке.
 

[DAN]

Старожил PHPClub
Если syntax error, то возможно сами документы не well-formed.

попробуй с теми файлами, которые я выложил у себя на сайте.
 

DiMA

php.spb.ru
Команда форума
Что это значит? Я скачал указанные файлы wget'ом. Если сомневаешься, что я криво скачал - могу запаковать и прислать обратно...
 

DiMA

php.spb.ru
Команда форума
Воспользовался способом ручной перекодировки: во все ХМЛ файлы записал кодировку UTF-8, текст в них по прежнему на русском (в кирилице).

$filexsl=iconv("ISO-8859-1","UTF-8",$filexsl);
$arguments = array('/_xml' => $filexml, '/_xsl' => $filexsl);
$xh=xslt_create();
$out=xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
$out=iconv("UTF-8","ISO-8859-1",$out);
$out=preg_replace("!content=\"text/html; charset=UTF-8\"!i","content=\"text/html; charset=windows-1251\"",$out,1);
 
Сверху