Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > xml и php5 кодировка


Автор: АлексейБ 5.7.2007, 06:00
Все работает,
но одна проблема - он выводит кириллицу, помогите исправить

________________
KPKG UM 
№ 1 
ГЉГЏГЉГѓ ГћГЊ 
№ 25 
________________


Код

<?xml version="1.0" encoding="iso-8859-1" ?>
<articles>
    <item>
        <title>KPKG UM</title>
        <link>1</link>
    </item>
    <item>
        <title>КПКГ ЮМ</title>
        <link>25</link>
    </item>
</articles>



Код

<?php
$dom = new DomDocument();
$dom->load("articles.xml");

foreach ($dom->documentElement->childNodes as $articles) {
    if ($articles->nodeType == 1 && $articles->nodeName == "item") {
        foreach ($articles->childNodes as $item) {
            if ($item->nodeType == 1 && $item->nodeName == "title") {
                echo "<p> $item->textContent </p>";
           }
            if ($item->nodeType == 1 && $item->nodeName == "link") {
                echo "<p>№ $item->textContent </p>";
            }
       }
    }
}
?> 


Автор: -=Ustas=- 6.7.2007, 09:34
АлексейБ, если бы ты знал о таком ресурсе как php.net, то ты бы сразу же мог бы посмотреть конструктор класса DOMDocument, и понять что он может принимать два параметра - версию документа и кодировку.
Код

$dom = new DomDocument( '1.0', 'WINDOWS-1251' );
$dom->load("articles.xml");

Кстати, articles.xml сохрани в кодировке WINDOWS-1251 и соответственно в файле
Код

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

А вообще советую окончательно переходить на Юникод, меньше проблем с кодировками будет.

Автор: АлексейБ 9.7.2007, 07:18
Ясно,

Подскажи, как изменять или добавлять данные в xml, не могу найти,
а что пробую то не работает - выдает ошибку

ПОМОГИТЕ очень СРОЧНО надо


Автор: UADeveloper 9.7.2007, 16:06
Цитата(-=Ustas=- @  6.7.2007,  09:34 Найти цитируемый пост)
АлексейБ, если бы ты знал о таком ресурсе как php.net, то ты бы сразу же мог бы посмотреть
 smile 

http://ru.php.net/manual/ru/ref.xmlwriter.php
http://ru.php.net/manual/ru/ref.libxml.php
http://ru.php.net/manual/ru/ref.simplexml.php
http://ru.php.net/manual/ru/ref.sdo-das-xml.php

Код
<?php
/**
 * Load, update, and save an XML document
 */
try {
   $xmldas = SDO_DAS_XML::create("letter.xsd");
   $document = $xmldas->loadFile("letter.xml");
   $root_data_object = $document->getRootDataObject();
   $root_data_object->date = "September 03, 2004";
   $root_data_object->firstName = "Anantoju";
   $root_data_object->lastName = "Madhu";
   $xmldas->saveFile($document, "letter-out.xml");
   echo "New file has been written:\n";
   print file_get_contents("letter-out.xml");
} catch (SDO_Exception $e) {
   print($e->getMessage());
}
?>



Ищи!

Автор: crazzzy 25.9.2007, 01:09
а если xml файл в UTF-8, а страничка (и весь сайт), в которой он выводится в виде таблицы, в windows-1251, то ...

я правильно понимаю, что вывести русский текст в значениях узлов можно только через iconv('utf-8', 'windows-1251', $column->textConten);

ведь внутреннее представление хранится в юникоде, а выводить надо в windows-1251.

Автор: IZ@TOP 27.9.2007, 14:50
XML всегда в юникоде. Тебе ничего не мешает указать кодировку после загрузки документа. 

Код

$XML    = '<?xml version="1.0" encoding="utf-8"?><root>Привет</root>';
$DOM    = new DOMDocument();
$DOM->loadXML($XML);
$DOM->encoding = 'windows-1251';
echo $DOM->saveXML();

Автор: crazzzy 27.9.2007, 21:02
мешать не мешает, но и не помагает ... ;)

мне нужно выводить на странице сайта данные из XML файла, русский текст присутствует. страница у меня в windows-1251, т.к. самая распространенная в русскоязычном инете ;) а xml файл генерируется сторонней программой и имеет кодировку utf-8

я вывожу значения узлов через  iconv('utf-8', 'windows-1251', $column->textConten);

вот и поинтересовался может можно как-то обойтися без iconv, при исходных данных задачи, т.е. может каким-то настройками ...

указание $DOM->encoding = 'windows-1251'; после загрузки документа в этом вопросе не помагло, выводятся кракозябры пока не сделаю  iconv('utf-8', 'windows-1251', $column->textConten);


Автор: IZ@TOP 1.10.2007, 17:48
Должно работать. Версия PHP какая? Что выдает мой пример. Хотелось бы посмотреть откуда вы берете данные и как обрабатываете.

Автор: crazzzy 1.10.2007, 22:35
php5 пакет Denver ...

я так понимаю, что твой пример, в таком виде, некоректен для моей задачи, т.к. помимо указания кодировки utf8 в xml файле его еще и сохранить надо в utf8 ...

файл xml прикрепил к сообщению (следует переименовать table.txt -> table.xml ).

вывожу его так:

Код

<?php
  $dom = new DomDocument();
  if(false === $dom->load('table.xml')){
    echo "This xml document is not valid!" . "<br />";
  }
  else{
    echo "This xml document is valid!" . "<br />";

    $dom->encoding = 'windows-1251';
    // echo $DOM->saveXML();

    foreach($dom->documentElement->childNodes as $rows){
       if($rows->nodeType == XML_ELEMENT_NODE && $rows->nodeName == "row"){
        echo $rows->getAttributeNode('src')->value . "<br />";
        foreach($rows->childNodes as $column){
          if($column->nodeType == XML_ELEMENT_NODE && $column->nodeName == "column"){
            echo $column->textContent . "<br />";
          }
        }
      }
    }
  }
?>


вместо русского языка кракозябры ... при установке кодировки в броузере в win1251, т.к. русский текст в xml utf8

Автор: skaizer 4.10.2007, 21:03
Цитата

вместо русского языка кракозябры ... при установке кодировки в броузере в win1251, т.к. русский текст в xml utf8

При выводе кирилицы из XML файла можно как вариант попробовать функцию перекодировки mb_convert_encoding()
Прототип функции:
Код

string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )

Пример, как ее использовал я:
Код

function encoding ($str){
            $code = "UTF-8";
            $curcode = "Windows-1251";
    $str = mb_convert_encoding($str, $curcode, $code);
    return $str;
}

Автор: crazzzy 6.10.2007, 03:08
а чем она лучше  iconv('utf-8', 'windows-1251', $column->textConten);

Автор: WolfON 6.10.2007, 11:42
тем, что расширение mbstring в которое входит mb_convert_encoding может быть установлено далеко не всюду smile

Автор: Guedda 6.10.2007, 12:13
Модератор: Пожалуйста, один топик - один вопрос.
Тема закрыта!

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