Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] PHP + XSTL | Смена кодировки результирующего файла (http://forum.oszone.net/showthread.php?t=125219)

Coutty 06-12-2008 22:09 974132

PHP + XSTL | Смена кодировки результирующего файла
 
XSLT-преобразование XML в XHTML почему-то выдаёт результат в UTF-8 с таким кодированием кириллических символов: & # x43C;& # x438;& # x440; (поставил пробелы, т.к. сразу буквы показывает :)). Отображается-то правильно, но вес документа увеличивается сильно. Да и неизвестно ещё, как поисковики такой текст индексируют.
Как заставить выполнять вывод или в UTF-8 с нормальным кодированием (чтоб в исходнике читался, а не только в браузере) или в кодировке windows-1251, например?

Исходные данные.

doc.xml:
Код:

<?xml version="1.0" encoding="windows-1251"?>
<catalog>
        <book id="1">
                <author>Автор 1</author>
                <title>Книга 1</title>
        </book>
       
        <book id="2">
                <author>Автор 2</author>
                <title>Книга 2</title>
        </book>
       
        <book id="3">
                <author>Автор 3</author>
                <title>Книга 3</title>
        </book>
</catalog>


doc.xsl:
Код:

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" 
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />
<xsl:template match="/">
<html>
<head>
        <title>Заголовок</title>
</head>
<body>
<xsl:for-each select="catalog/book">
<xsl:value-of select="author" /> - <xsl:value-of select="title" /><br />
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

index.php:
PHP код:

<?php 
   $xslDoc 
= new DOMDocument();
   
$xslDoc->load("doc.xsl");

   
$xmlDoc = new DOMDocument();
   
$xmlDoc->load("doc.xml");

   
$proc = new XSLTProcessor();
   
$proc->importStylesheet($xslDoc);
   echo 
$proc->transformToXML($xmlDoc);
?>


Sham 07-12-2008 02:24 974242

у DOMDocument там куча свойств (encoding, substituteEntities...), и я бы поигрался с ними (перед load)...

Coutty 07-12-2008 09:31 974322

Где их хоть посмотреть-то можно? В справке PHP свойства не перечислены (или я совсем не там смотрю...).

Нашёл ещё такой способ установки кодировки, но это кодировка для исходных файлов ставится. В итоге всё равно UTF-8 с этими семибайтными символами.
PHP код:

<?php 
   $xslDoc 
= new DOMDocument("1.0""windows-1251");
   
$xslDoc->load("doc.xsl");

   
$xmlDoc = new DOMDocument("1.0""windows-1251");
   
$xmlDoc->load("doc.xml");

   
$proc = new XSLTProcessor();
   
$proc->importStylesheet($xslDoc);
   echo 
$proc->transformToXML($xmlDoc);
?>


Sham 08-12-2008 03:26 975109

Цитата:

Цитата Coutty
Где их хоть посмотреть-то можно? »

http://ru2.php.net/DOMDocument
http://ru2.php.net/xsltprocessor

Coutty 08-12-2008 14:08 975470

По ссылкам посмотрел - есть что полезное (узнал, кстати, новый метод поиска на php.net - просто указать искомое после URL'а)), но с кодировкой вопрос решился совсем в другой области :)
В самом XSL-файле изменил директиву xsl : output на такую:
Код:

<xsl:output
method="xml"
encoding="windows-1251"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd" 
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />

Теперь кодировка именно windows-1251 получается.


Время: 03:13.

Время: 03:13.
© OSzone.net 2001-