Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 16.10.2011
Сообщений: 14

Проблемы с кодировкой xml

25.10.2012, 12:05. Показов 2158. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день

Пишу класс для работы с yandex market.
Формат данных для импорта в YM, как известно, YML

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

Из кода вырезаны куски, которые не относятся к проблеме
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
//Создаем документ, суть проблемы кроется в этой функции. Дальнейшие можно посмотреть потом.
//Проблема после кода
protected function _create_document($date)
{
    if (!preg_match('/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}$/', $date))
        throw new Exception('Date incorrect');
    
    $imp = new DOMImplementation();
    $dtd = $imp->createDocumentType('yml_catalog', '', 'shops.dtd');
    $doc = $imp->createDocument('','', $dtd);
        
    $doc->encoding = 'koi8-r';
        
    return $doc;
}
 
public function __construct($date)
{   
    $this->document = $this->_create_document($date);
}
 
 
//Здесь мы создаем ноду с текстовой нодой внутри
protected function _txt_elem_create($name, $value = null, $attrs = array())
{
    $elem = $this->document->createElement($name);
        
    if ($value !== null)
    {
        $text = $this->document->createTextNode($value);
        $elem->appendChild($text);
    }
        
    if (!empty($attrs))
       $this->_elem_set_attrs($elem, $attrs);
        
    return $elem;
}
 
//Создаем описание магазина
public function create_shop($shopData)
{
    $allowed_tags = array_flip(array('name', 'company', 'url', 'platform', 'version', 'agency', 'email'));
        
    $shop = $this->document->createElement('shop');
    
    foreach ($shopData as $tag => $data)
    {
        if (!isset($allowed_tags[$tag]))
            throw new Exception('Forbidden tag');
            
        $new_el = $this->_txt_elem_create($tag, $data);
        
        $shop->appendChild($new_el);
    }
    
   $this->shop = $shop;
        
}
 
//Собираем xml
public function build()
{
    $root_elem = $this->document->createElement('yml_catalog');
    
    if ($this->shop)
        $root_elem->appendChild($this->shop);
            
    $this->document->appendChild($root_elem);
        
    return $this->document->saveXML();
}
 
//Далее используем класс, который написали
 
$yml = new YmlDocument('2012-10-12 12:34');
 
$shop = array(
    'name'     => 'Какая-то фирма',
    'company'  =>'ООО "Какая-то фирма"',
    'url'      =>'http://foo.ru',
    'platform' =>'joomla',
    'version'  =>'2.5',
    'agency'   =>'Вася Пупкин',
    'email'    =>'support@foo.ru',
);
 
$yml->create_shop($shop);
 
echo $yml->build();
Функция _create_document создает новый xml-файл и ставит для него кодировку.

1. Сам файл скрипта у меня в кодировке KOI8-R
2. Если поставить
PHP
1
$doc->encoding = 'koi8-r';
то сразу же вылетает ошибка
Warning: DOMDocument::saveXML() [domdocument.savexml]: output conversion failed due to conv error, bytes 0xC1 0x3C 0x2F 0x6E in Z:\home\localhost\www\misha\1.php on line 158
Почему кодировки совпадают, но скрипт выдает ошибку? Это первый вопрос

3. Еще более бредовым решением будет поставить (кодировка реальных данных не совпадает с поставленной)
PHP
1
$doc->encoding = 'utf8';
И тогда вывод на экран становится нормальным? Это второй вопрос

Почему так?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.10.2012, 12:05
Ответы с готовыми решениями:

Проблемы с кодировкой
В базу не поступают данные записанные на русском,хотя с латиницей все нормально. Код <?PHP header('Content-Type: text/html;...

Проблемы с кодировкой
Привет всем я через aJax запрос передаю данные из формы в таблицу и получаю в таблице данные в таком формате фывфывфывф вот...

Проблемы с кодировкой
Здравствуйте, дорогие друзья. Надеюсь очень на вашу помощь. Дело вот в чем. Есть игра, сделаная на Javascript. Кодировка самого файла...

3
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
25.10.2012, 12:23
adr6t7, а вы уверены, что
Цитата Сообщение от adr6t7 Посмотреть сообщение
Сам файл скрипта у меня в кодировке KOI8-R
?
Может у вас в meta-теге одно написано, а на деле другая кодировка?
0
0 / 0 / 0
Регистрация: 16.10.2011
Сообщений: 14
25.10.2012, 13:30  [ТС]
Обычно использую np++
В нем изначально стояла кодировка ansi. В самом начале написания кода, просто машинально поставил utf8 в кодировку в php
PHP
1
$doc->encoding = 'utf8';
Потом сменил кодировку файла в нп++ на windows-1251 и поменял в скрипте. Скрипт выдал ошибку.

Я попробовал другую кодировку (KOI8-R) и скрипт также выдал ошибку.
Но когда я изменил на UTF обратно $doc->encoding, все заработало.

Сейчас открыл обычный нотепад, сохранил файл им, тот кроме 1251 ничего и не умеет вроде. Результат тот же.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
25.10.2012, 13:38
Попробуйте всё перепроверить и сохранить все файлы, задействованные скриптом в кодировке UTF-8

Добавлено через 57 секунд
И старайтесь пользоваться проверенным редактором, с которым не было проблем.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2012, 13:38
Помогаю со студенческими работами здесь

проблемы с кодировкой
скачал этот скрипт обратной связи: http://flashripper.net/2008/03/09/skript-formy-obratnoj-svyazi-na-php-v30.html при заливке на хостингc...

Проблемы с кодировкой
.htaccess стоит кодировка utf-8 в классе бд public function __construct () { $this->config = new Config(); ...

проблемы с кодировкой
делаю запрос к БД. обращаюсь к процедуре. Сервер выдает ошибку. Долго думал в чем проблема, пока сам запрос не скопировал в блокнот. там...

Проблемы с кодировкой текста
(не уверен что это та категория но предположим что я не ошибся) Здравствуйте, у меня есть консольное приложение которое отправляет запрос...

Проблемы с кодировкой на денвере
Когда у файле .htaccess пишу AddDefaultCharset utf-8 все русские символы превращаются в знаки вопросов, а когда удаляю файл htaccess все...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru