За последние 24 часа нас посетили 102943 программиста и 5648 роботов. Сейчас ищут 1992 программиста ...

разбор xml с русскими тегами

Тема в разделе "PHP для новичков", создана пользователем bizovo, 27 апр 2009.

  1. bizovo

    bizovo Активный пользователь

    С нами с:
    25 мар 2009
    Сообщения:
    42
    Симпатии:
    0
    Доброго времени суток!
    Есть xml с русскими тегами в utf-16, пытаюсь разобрать с помощью SimpleXML
    Есессено сперва прочел хелп и вроде бы все просто, но как работать с русскими тегами не пойму.
    Читал вот это http://www.php.ru/manual/ref.simplexml.html
    чтобы разобрать xml нужно обрщаться к его нодам $xml->movie[0]->plot
    Но как я могу обратится к нодам если они в utf-16 и на русском?
    К примеру у меня вот такой xml
    <Товар>
    <Марка>Toyota</Марка>
    <Модель>Corolla</Модель>
    <Год>2009</Год>
    </Товар>
    Xml выдется только на русском, перевести на английский нет возможности это однозначно.
     
  2. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    лучше не делай кирилицой, это делать себе в ущерб имхо...

    я тебе вырежу код с книги - php в Подлиннике, может поможет

    unicode.ini
    PHP:
    1.  
    2. <?php
    3. ## Функции перевода строк из кодировки WINDOWS-1251 в UTF-8 и обратно
    4. setlocale(LC_ALL,"ru_RU.CP1251");
    5.  
    6. //Стандартная кодировка документа
    7. define('Encoding','WINDOWS-1251');
    8.  
    9. //Заголовок XML-документа
    10. define ('XMLHead',"<?xml version='1.0' encoding='".Encoding."'?>");
    11.  
    12. /**
    13.  * Перекодировать строку в кодировку UTF-8
    14.  *
    15.  *  @param string str    перекодируемая строка
    16.  *  @param string encode исходная кодировка (по умолчанию WINDOWS-1251)
    17.  *
    18.  * @return  перекодированная строка в кодировке UTF-8
    19.  */
    20. function utf8encode($str,$encode=Encoding)
    21. {
    22.     return iconv($encode,'UTF-8',$str);
    23. }
    24.  
    25. /**
    26.  * Перекодировать строку из кодировки UTF-8
    27.  *
    28.  *  @param string str    перекодируемая строка в кодировке UTF-8
    29.  *  @param string encode целевая кодировка (по умолчанию WINDOWS-1251)
    30.  *
    31.  * @return  перекодированная строка в указанной кодировке
    32.  */
    33. function utf8decode($str,$encode=Encoding)
    34. {
    35.     return iconv('UTF-8',$encode,$str);
    36. }
    37. ?>
    38.  
    39.  

    index.php

    PHP:
    1.  
    2. <?php
    3. include 'unicode.inc';
    4. $xml="<?xml version='1.0' encoding='UTF-8'?>
    5. <программа>
    6.  <MTV>Канал MTV</MTV>
    7.  <МузТВ>Канал МузТВ</МузТВ>
    8. </программа>";
    9.  
    10. $mtv=$prog->MTV;
    11. echo utf8decode($mtv)."\r\n";
    12.  
    13. $mustv=$prog->МузТВ;    
    14. echo utf8decode($mustv)."\r\n";
    15. ?>
    16.  
    17.  
    не гарантирую работу примера т.к. в исходных кодах кодировка другая, а когда я вписывал в форум я ее изменил иба тута каракули :) ну если захочешь разобраться скачаешь оригинальные исходники....
     
  3. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Если исходник в UTF-8, то никакой разницы на каком языке теги. В остальных случаях каждый ССЗБ
     
  4. bizovo

    bizovo Активный пользователь

    С нами с:
    25 мар 2009
    Сообщения:
    42
    Симпатии:
    0
    Исходник в UTF-8
    Так мне разбор тегов делать на русском чтоли?
    вот так: $mustv=$prog->МузТВ;
    уже попробывал как написал alexeurodnepr все нормально, только на тег МузТВ у меня ноль эмоций.
    Выводит только $mtv=$prog->MTV;
    Как мне к русским тегам обращаться???
    Пока писал, мне тут подсказали.
    Вобщем я переведу все русские теги в английские с помощью str_replace и уже разберу xml.
    Правильно мне подсказали?
     
  5. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    bizovo
    Сорри, невнимательно вчитался. PHP пока не позволяет русских имен переменных, поэтому либо действительно str_replace, либо использовать DOM.
     
  6. alexeurodnepr

    alexeurodnepr Активный пользователь

    С нами с:
    18 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    $mustv=$prog->МузТВ;
    echo utf8decode($mustv)."\r\n";


    это как бы решение, вот на тебе исходник той фигни шо я выложил, только там другая какае-то кодировка... вообщем работать будет, парсит нормально...

    ЗЫ - хотелось бы, что б админы форума вставили сюда фишку для закачки файлов, было б очень удобно вставлять то рисунки, толи код в архивах... а то лазить по разных сайтах генерить ссылки для скачки напряжно))) спс
     
  7. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.783
    Симпатии:
    0
    давно уже позволяет :)

    Код (Text):
    1. Канал МузТВ
     
  8. AlexGousev

    AlexGousev Активный пользователь

    С нами с:
    25 мар 2006
    Сообщения:
    1.505
    Симпатии:
    0
    Адрес:
    Москва
    Ух ты. А мне почему-то казалось, что только в 6-ке добавят.