Наверное такое уже было но я не нашел поиском

MoonCat

Старожил PHPCluba
как вытащить в DOMXML содержимое ноды в windows-1251 а не в UTF-8

экспериметальная база : windows + апач + php
имеем XML текст в win-1251

при "выковыривании" из атрибутов или из значений русских
слов вылезает полная чушня :confused:

примерно такое :

ожидается : "news text 1( текст новости 1 )"
вылезает : "news text 1( текст новости 1 )"

разные попытки всевозможных переконвертаций к результату не привели :mad:
 

slach

Новичок
это UTF-8

ты первой строкой ставил
<?xml version="1.0" encoding="windows-1251"?>
???
 

MoonCat

Старожил PHPCluba
конечно , иначе она в принципе "грязно" ругается :)

я тоже байтики пощитал и решил что это UTF-8 и попытался его utf8_decode ... потом всякие варианты , но что то не помогло :(
 

slach

Новичок
а ЧЕМ выковыриваешь ???

XSLT Sablotron ?
тогда ставь
<xsl:eek:utput method="xml" encodin="windows-1251">

Expat SAX ???
тогда
utf_decode - хотя там должно быть нормально все
 

MoonCat

Старожил PHPCluba
я выковыриваю примерно так :

PHP:
	  $xml = xmldoc($xml);
   	  $xml->xpath_init();
	  $ctx  = xpath_new_context($xml);
  // выберем все FIELD
	 $FN = xpath_eval($ctx,'//FIELD');
	 $FieldName = Array();
	 foreach($FN->nodeset as $FName)   
	   { 
	       $Num   = $FName->get_attribute('Num');   
	       $Name = $FName->get_attribute('Name');
		   $FieldName[$Num] = $Name;
	   }
добавление в заголовке XML method="xml"
ничего не дало
 

slach

Новичок
method="xml" в XML документе не надо давать

короче... get_attribute и get_content
выдает все в UTF-8 ;) полубому...

пользуйся iconv* ф-циям
 

MoonCat

Старожил PHPCluba
а вот iconv у меня что то вообще не работают :(
может у меня ICONV.DLL ? какая то несвежая :(
 

chameleon

Новичок
при всем уважении....блин.... :)..
я вот сюда захожу 3-й раз, потому что не могу запомнить что тут обсуждают :)... а заголовок НЕИНФОРМАТИВЕН :(...
модератор бы наградил ;)...
 

slach

Новичок
я тут модератор.. заголовок исправил...
хамелеон, а тебя бы я попросил не йорничать...
вопросы по XML\XSLT достаточно редкие...
при этом в 50% случаев человеку XML просто НЕ НУЖЕН...

2MoonCat:
помимо iconv.dll которая должна лежать в c:\winnt\system32\

должен быть раскоментарен
extention=php_iconv.dll

и должны работать ф-ции http://php.net/manual/en/ref.iconv.php
 

MoonCat

Старожил PHPCluba
спасибо ... точно есть такая php_iconv.dll :D
я ее просмотрел когда версию PHP обновлял :p

p.s. хотя я и так выкрутился следующим образом :

PHP:
// конвертить из win в ico
$xml_text = ereg_replace("<[?]xml .*[?]>",
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>",
$xml_text);
$xml = convert_cyr_string($xml_text, "w", "i"); 

// все что нужно выдергиваю их XML  
.....

foreach($FN->nodeset as $FName)   
   { 
       $Name = $FName->get_attribute('Name');
       // декодируем из UTF в ICO
        $Name = utf8_decode($val);
       // ну к приятной глазу WIN 1251  
        $Name = convert_cyr_string($Name, "i", "w");
   }

...........
вообще слегка "криво" но работает :rolleyes:
 

DJ Rabbit

Guest
А зачем конвертировать из win в iso? Создаёшь документ:

PHP:
<?
$xmldoc = domxml_open_mem("<". "?xml vrsion=\"1.0\" encoding=\"windows-1251\"?". "><bla-bla-bla/>");

print($xmldoc->dump_mem());
?>
Я так делаю, никаких проблем с кириллицей, всё в win1251 выдаётся. Если такой код у тебя выдаёт UTF, значит не все библиотеки на месте.
 
Сверху