DOMDocument и Русский язык.

Dara

Новичок
DOMDocument и Русский язык.

Здравствуйте господа,
прошу прощения, если данный вопрос уже поднимался на форуме и на него дано решение, однако ничего кроме прошлогоднего диспута так и оставшегося открытым мне найти не удалось.

Есть xsl шаблон, в котором должны быть статитеческий текст на русском. При парсинге шаблона руссский текст превращаеться в белеберду.

------------------------- my.xsl ------------------
<?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"/>
<xsl:template match="root">
....
<xsl:text>Русский текст..... </xsl:text>
.....
</xsl:template>
</xsl:stylesheet>



-----------------------my.php-----------------------------
$xsl = new DOMDocument();
$xsl->load("my.xsl");

$xsl_parser = new XSLTProcessor();
$xsl_parser->importStylesheet($xsl);
$result = $xsl_parser->transformToXml($xml); // Здесь в переменной xml находиться некий xml документ, есстественно....
echo $result;

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

-~{}~ 15.12.06 11:17:

Хм... Неужели никто не сталкивался с подобной проблемой? Или я что-то не так написал?
Еще раз описываю ситуацию. Предположим, есть некий XML-файл в котором находиться список сотрудников. И есть xslt шаблон, переводящий этот список в HTML-таблицу. Предположим, под таблицей нужно вывести надпись на русском языке, о том, что именно мы слобали этот скрипт.
Все данные XML (из БД), несмотря на то, что они изначально находяться в кодировке windows-1251 отображаються нормально, и только та строка, которую мы вставили в сам xslt-шаблон отображаеться в левой кодировке.

Если кто-то знает решение, помогите плз.
 

Dara

Новичок
2sayber

-~{}~ 16.12.06 12:33:

Warning: XSLTProcessor::transformToXml() [function.transformToXml]: output conversion failed due to conv error, bytes 0xCD 0xEE 0xE2 0xE8

вот что я получаю на выходе. Шаблон естественно не парситься.
 

slach

Новичок
ну вот
$xml
в НЕКИЙ XML документ стоит посмотреть, что там внутри
сделать для него
xmllint.exe какой нибудь
провалидировать

судя по всему XML у вас там utf-8 ??
а шаблон XSL windows-1251 ?
 

Dara

Новичок
Да не должен быть... XML собираеться DomDocument. Данные беруться из БД. БД в cp1251. При создании Документа кодировка указана:

$dom = new DOMDocument("1.0","windows-1251");

в шаблоне стоит:

<?xml version="1.0" encoding="windows-1251"?>

Насколько я понимаю,это изначально указывает кодировку документа.

-~{}~ 17.12.06 13:59:

Другое дело, если убрать атрибут encoding из output в шаблоне. Тогда все будет парситься без ошибок. За одним усключением. Русский текст в шаблоне будет отображаться в левой кодировке:

Русский язык

-~{}~ 17.12.06 15:37:

Так! Вот тут стало понятнее, Вы оказались правы и эта проблемма действительно появляеться из-за разности кодировок... Если ВСЕ данные изначально перевсти в Unicode, а уж затем, преобразованный HTML обратно в win-1251, то все работает, но сразу работать с win1251 он почему-то нежелает... или я чегото непонимаю.
 

slach

Новичок
ну вы не понимаете главного
внутреннее представление для XML это все равно unicode
все что собирается В НЕГО, через DOMDocument должно перекодироваться через unicode ;)
у вас оно похоже перекодируется в "сущности" типа &#номер;

чтобы в таких условиях работать с cp1251
данные при работе с DOM должны конвертироваться из cp1251 в utf-8 через iconv например


может поможет
 

Dara

Новичок
Спасибо, именно iconv и помогает. Похоже разобрались.
 
Сверху