simbel
Новичок
Кодировка(win1251) и символы( " & > < ' ) в SAX.
Подскажите, пожалуйста, в какое место кода представленного ниже SAX-парсера нужно вставить функцию iconv("UTF-8", "windows-1251", ...), чтобы результ вывода массива $shops показывался в кирилической кодировке? Не могу понять.
И ещё вопросик, как обрабатывать символы " & > < ' , которые могут встретиться в XML-файле? Парсер представленный ниже выдаёт ошибку, если тег <url>http://allpoisk.ru/xml.plx?id=4294964705&iid=289</url> содержит символ & или тег <name>"Все для Вашей фигуры"</name> содержит символ ".
Вот не сложный SAX-парсер -
Этим парсером нужно обработать простой XML-документ -
Буду очень благодарен за помощь, заранее спассибо!
Подскажите, пожалуйста, в какое место кода представленного ниже SAX-парсера нужно вставить функцию iconv("UTF-8", "windows-1251", ...), чтобы результ вывода массива $shops показывался в кирилической кодировке? Не могу понять.
И ещё вопросик, как обрабатывать символы " & > < ' , которые могут встретиться в XML-файле? Парсер представленный ниже выдаёт ошибку, если тег <url>http://allpoisk.ru/xml.plx?id=4294964705&iid=289</url> содержит символ & или тег <name>"Все для Вашей фигуры"</name> содержит символ ".
Вот не сложный SAX-парсер -
PHP:
<?php
$shops = array();
$currentShop = null;
$index = null;
function saxStartElement($parser,$name,$attrs)
{
global $currentShop,$index;
switch($name)
{
case 'list':
$shops = array();
break;
case 'adv':
$currentShop = array();
if (in_array('id',array_keys($attrs)))
$currentShop['id'] = $attrs['id'];
break;
default:
$index = $name;
break;
};
}
function saxEndElement($parser,$name)
{
global $shops,$currentShop,$index;
if ((is_array($currentShop)) && ($name=='adv'))
{
$shops[] = $currentShop;
$currentShop = null;
};
$index = null;
}
/function saxCharacterData($parser,$data)
{
global $currentShop,$index;
if ((is_array($currentShop)) && ($index))
$currentShop[$index] = $data;
}
$parser = xml_parser_create();
xml_set_element_handler($parser,'saxStartElement','saxEndElement');
xml_set_character_data_handler($parser,'saxCharacterData');
xml_parser_set_option($parser,XML_OPTION_CASE_FOLDING,false);
$xml = join('',file('shops.xml'));
if (!xml_parse($parser,$xml,true))
die(sprintf('Ошибка XML: %s в строке %d',
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
xml_parser_free($parser);
?>
<pre><?print_r($shops)?></pre>
Код:
<?xml version="1.0" encoding="windows-1251" ?>
<list>
<adv id="3688">
<name>"Все для Вашей фигуры"</name>
<url>[url]http://allpoisk.ru/yaml.plx?id=4294964705&iid=3688[/url]</url>
</adv>
<adv id="289">
<name>DOM 220v интернет-магазин</name>
<url>[url]http://allpoisk.ru/xml.plx?id=4294964705&iid=289[/url]</url>
</adv>
<adv id="823">
<name>07.RU</name>
<url>[url]http://allpoisk.ru/xml.plx?id=4294964705&iid=823[/url]</url>
</adv>
</list>
Буду очень благодарен за помощь, заранее спассибо!