Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > xsl русские символы преобразует в коды


Автор: Elena Nefedova 5.9.2008, 13:12
После применения трасформации к исходным данным получаю результат, в котором русские символы заменены соответствующими кодами
(ниже приведены все фрагменты)

Нельзя ли задать какими-то параметрами, чтобы русские символы отображались в виде текста, а не в виде кодов?
Или это особенности notes-трансформера?

Фрагмент исходных данных
Код

<?xml version='1.0' encoding = "Windows-1251" ?>
<?xml-stylesheet type="text/xsl" href="trans-3.xsl" ?>

<database xmlns='http://www.lotus.com/dxl' version='8.0' maintenanceversion='1.0'
 replicaid='C32574AD002D7952' path='tmp_auto_patch.ntf' title='Шаблон - Автомат'
 templatename='ROBOT' allowstoredforms='false' maintainunread='false' increasemaxfields='true'
 allowheadlinemonitors='false' uselz1='true'>

<document form='assembling'>
     <item name='Com'><text>Проверка выгрузки конфигурации</text></item>
</document>

</database>


Соответствующий код трансформации
Код

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

<xsl:stylesheet version="1.0" 
xmlns:dxl="http://www.lotus.com/dxl"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
exclude-result-prefixes='dxl' >

<xsl:output method = "xml" version = "1.0" encoding = "Windows-1251" omit-xml-declaration = "no" standalone = "yes" />

<xsl:template match="/">
<configuration>
     <description>
      <xsl:value-of select = "//dxl:document[@form = 'assembling']/dxl:item[@name = 'Com']/dxl:text" />
     </description>
</configuration>
</xsl:template>
</xsl:stylesheet>

Текст файла-результата
Код

<?xml version="1.0" encoding="Windows-1251" standalone="yes"?>
<configuration>
     <description>& #1055;& #1088;& #1086;& #1074;& #1077;& #1088;& #1082;& #1072;& #1074;& #1099;& #1075;& #1088;& #1091;& #1079;& #1082;& #1080; & #1082;& #1086;& #1085;& #1092;& #1080;& #1075;& #1091;& #1088;& #1072;& #1094;& #1080;& #1080;</description>
</configuration>





Автор: gcc 6.9.2008, 16:21
база данных в какой кодировке?

Автор: Elena Nefedova 8.9.2008, 17:33
База данных на сервере Domino 8.0.1
М.б. UTF-8 родная кодировка, но точно не знаю

Когда данные выгружаю, она кодировку не добавляет, а пишет все без кодировки в стрим, а стрим я вывожу в файл с нужной мне кодировкой (абсолютно любой) - это как раз и получаются исходные данные

Автор: yalo 21.8.2012, 17:38
Здравствуйте!
Может быть за четыре года нашелся ответ? мне сейчас это тоже очень актуально. В браузере-то все красиво, но при просмотре html-кода русские символы заменены на ссылки на эти символы. Кодировка везде utf-8
Код

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<table border="1" width="100%" cellpadding="3" cellspacing="0">
    <tr>
    <xsl:for-each select="/head_tbl/td_cell">
        <td><a href="index.php?sort={@name_tbl}"><xsl:value-of select="@name"/></a></td>
    </xsl:for-each>
    </tr>
    <tr>
    <xsl:for-each select="/tbl/elem">
        <tr>
            <xsl:for-each select="*">
                <td><xsl:value-of select="*"/></td>
            </xsl:for-each>
        </tr>
    </xsl:for-each>
    </tr>
</table>
</xsl:template>
</xsl:stylesheet>

на выходе в html тоже получаем 
Код

   <META http-equiv=Content-Type content="text/html; charset=UTF-8"/>

в пхп при создании трансформации тоже указываю utf8:
Код

            $xsl = new DOMDocument ('1.0', 'UTF-8');
            $xsl->load('xsl/adm_tbl_cont.xsl');

            $proc = new XSLTProcessor;
            $proc->importStylesheet ($xsl);
            $html = $proc->transformToDoc ($myxml)->saveHTML ();

Автор: diadiavova 21.8.2012, 21:06
Цитата(yalo @  21.8.2012,  18:38 Найти цитируемый пост)
Кодировка везде utf-8

Ну уж так-таки и везде. А как насчет элемента output в преобразовании? Хотя по идее она должна устанавливаться по умолчанию в утф-8. Может у тебя скажем исходный документ сохранен в другой кодировке, хотя указана эта?

Автор: yalo 25.8.2012, 12:08
diadiavova, нет, все документы сохранены в кодировке UTF-8: и php-скрипты, и xml, и xsl-шаблоны, в БД тоже все сохраняется в UTF8. И происходит все на стадии формирования еще xml, так как делаю после формирования  
Код
echo $xml->saveHTML (); 
 и уже вместо русских слов цифровые ссылки

а еще если перед  
Код
echo $xml->saveHTML (); 
  сделать
Код
            
$as = $xml->getElementsByTagName('td_cell');
foreach($as as $df) echo $df->nodeValue, PHP_EOL;
 и сделать "просмотреть исходный код" в браузере, то получится, что то, что выводилось после применения метода getElementsByTagName и вывода свойства nodeValue, то все это содержимое выводится корректно - русские буквы как русские.. ничего не пойму уже, помогите пожалуйста smile 
 я бы даже забила и на то, что в  
Код
echo $xml->saveHTML (); 
 выводятся ссылки вместо слов, но дело в том, что оно ведь потом у мня подается для преобразования xslt, чтобы получить в итоге красивенький html, и туда видимо подается тоже в виде ссылок, потому как в html тоже ссылки smile 

Автор: yalo 26.8.2012, 13:51
неужели никто не знает в чем проблема? помогите, пожалуйста smile с темой xslt так все туго до сих пор, так немного практикующих, книжек тоже не так много, особенно на родном нашем языке:( если кто-то что-то знает, или имеет хотя бы еще какие-то предположения, в чем проблема у меня заключается, или сталкивался тем более сам с подобным - очень прошу, черканите пару строк! Буду благодарна любым советам и гипотезам (за исключением, разумеется, "зачем тебе эта xslt-шаблонизация, делай мол по старинке гибрид php+html и дело с песней" - такие тоже советчики находились уже:( )

Автор: diadiavova 26.8.2012, 14:00
yalo, если преобразование выполняется средствами пхп, то может вопрос следовало задать в пхпшном разделе? Например в дотнете, если при программном преобразовании используется хмлрайтер, то элемент аутпут преобразования просто не учитывается. Такие нюансы могут быть и в пхпшных хмл апи.

Автор: yalo 26.8.2012, 14:36
diadiavova, спасибо за подсказку:) попробую там вопрос этот сформулировать, может и правда в пхп-преобразовании дело..

Автор: diadiavova 26.8.2012, 14:48
И кстати, если уж говорить о самом хслт, то у некоторых элементов( валью-оф например) есть атрибут disable-output-eskaping. Можно ещё с ним попытаться поколдовать.

Автор: dma84 5.10.2012, 14:27
Может кому пригодится


Если подгружаете HTML через loadHTML, то нужно добавлять <?xml version="1.0" encoding="UTF-8">

Код

$doc = new DomDocument();
$doc->loadHTML('<?xml version="1.0" encoding="UTF-8">'.$html);

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)