Помогите с генерацией XML

Samail
На сайте с 10.05.2007
Offline
369
1770

1. В БД кодировка Windows-1251, в фиде требуется UTF-8. В коде указал:

header("Content-Type: text/xml;charset=Windows-1251");


ECHO <<<END
<?xml version="1.0" encoding="UTF-8"?>

Так правильно?

2. Внутри тега <generation-date></generation-date> необходимо вставить дату генерации фидав формате: "YYYY-MM-DDTHH:mm:ss+10:00", как её туда воткнуть?

F
На сайте с 06.06.2008
Offline
51
#1

1. Что-то меня терзают смутные сомнения, что это будет правильно. ТС - потестируйте получившийся XML через какой-либо ридер. А вообще советую поискать в направлении iconv, эта функция умеет менять кодировку у текстовых переменных.

2. Функция date() и http://php-date.ru/paragraphs/date_format Вам в помощь и все получится :)

[umka]
На сайте с 25.05.2008
Offline
456
#2
В БД кодировка Windows-1251

В базе (я полагаю, речь идёт о mysql) инфа всегда хранится в utf-8, а выдаёт она её в той кодировке, в которой просит клиент (скрипт), или в дефолтной.

Чтобы попросить базу отдавать инфу в UTF-8, нужно после подключения (mysql_connect), сказать ей ещё пару слов:

$q=mysql_query("SET CHARACTER SET UTF8");

и после этого идёт уже запрос к базе, получение инфы, и выдача

header("Content-Type: text/xml;charset=utf-8"); 
ECHO <<<END
<?xml version="1.0" encoding="UTF-8"?>
Лог в помощь!
Samail
На сайте с 10.05.2007
Offline
369
#3

[umka], не сработал такой вариант, "Ошибка разбора XML: синтаксическая ошибка" и всё квадратиками.

[Удален]
#4

Из серии: Опять я пытаюсь сделать необычное.

А не проще кодировку в самой базе на время экспорта перебить?

ALTER TABLE `table_name` CONVERT TO CHARACTER SET 'utf8';

Или iconv используйте во время конвертации.

А лучше обратитесь к программисту.

4arger
На сайте с 17.12.2008
Offline
95
#5
Samail:
2. Внутри тега <generation-date></generation-date> необходимо вставить дату генерации фидав формате: "YYYY-MM-DDTHH:mm:ss+10:00", как её туда воткнуть?

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


$xml = simplexml_load_string('<root><generation_date></generation_date></root>');
$xml->generation_date = 'YYYY-MM-DDTHH:mm:ss+10:00';
echo $xml->asXml();
[Удален]
#6

Вуаля!

iconv('windows-1251', 'utf-8', '<?xml version="1.0" encoding="UTF-8"?>');

Хотя так опупеть можно, лучше весь XML сунуть в переменную:

$UTF8XML=iconv('windows-1251', 'utf-8', $MoiXML); 

echo $UTF8XML;

И, конечно, не забудьте этот выходной файл засейвить в utf-8 - т.е. можно тупо открыть блокнотом и сохранить: файл>сохранить как>кодировка: UTF-8, по дефолту если он в windows-1251 там будет ANSI. При сохранении в новой кодировке может потеряться русский текст, а аглицкий будет сохранен - он в том же диапазоне.

В особо запущенных случаях работы сервера для избежания глюков с прочими процедурами, если где-то ещё есть русский текст пользуйтесь require или include`ами, дабы избежать неполадок.

Samail
На сайте с 10.05.2007
Offline
369
#7
Ogurchik:
А не проще кодировку в самой базе на время экспорта перебить?

Нет не проще, экспорт каждый час происходить будет.

[Удален]
#8

вот используйте тогда iconv как вам советовали выше

Samail
На сайте с 10.05.2007
Offline
369
#9
[umka:
]Чтобы попросить базу отдавать инфу в UTF-8, нужно после подключения (mysql_connect), сказать ей ещё пару слов:

Код:
$q=mysql_query("SET CHARACTER SET UTF8");и после этого идёт уже запрос к базе, получение инфы, и выдача

Затупил я, сам PHP файл в Windows-1251 сохранен был. Браузером нормально открывается, а validome.org пишет:

Документ не соответствует спецификациям.

Использованная кодировка знаков: utf-8

Source: Заданный набор знаков из заголовка HTTP протокола

Samail добавил 14.12.2010 в 23:32

freesoccer:
2. Функция date() и http://php-date.ru/paragraphs/date_format Вам в помощь и все получится

Поковырял, дата то ставится, но яндекс пишет:

Статус XSD:
Error: cvc-datatype-valid.1.2.1: '2010-12-14MSK11:12:38+3:00' is not a valid value for 'dateTime'. Line: 3 Error: cvc-type.3.1.3: The value '2010-12-14MSK11:12:38+3:00' of element 'generation-date' is not valid. Line: 3 Error: cvc-type.3.1.3: The value '' of element 'value' is not valid. Line: 31

Что с датой не так?

F
На сайте с 06.06.2008
Offline
51
#10

Скорее всего проблема в MSK...

Попробуйте так:

echo date("r");

Этот вариант используется в большинстве XML.

Если не получится - второй вариант:

echo date("Y-m-d H:i:s O");

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий