Coutty
06-12-2008, 22:09
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
$xslDoc = new DOMDocument();
$xslDoc->load("doc.xsl");
$xmlDoc = new DOMDocument();
$xmlDoc->load("doc.xml");
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
echo $proc->transformToXML($xmlDoc);
?>
Как заставить выполнять вывод или в 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
$xslDoc = new DOMDocument();
$xslDoc->load("doc.xsl");
$xmlDoc = new DOMDocument();
$xmlDoc->load("doc.xml");
$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
echo $proc->transformToXML($xmlDoc);
?>