2014-10-19 3 views
1

У меня есть ниже PHP код, который при разборе XML из URLXML Ошибка: недопустимый символ

$parser=xml_parser_create(); 

function char($parser,$data) 
    { 
    echo $data; 
    } 

xml_set_character_data_handler($parser,"char"); 
$fp=fopen("http://example.com","r"); 

while ($data=fread($fp,4096)) 
    { 
    xml_parse($parser,$data,feof($fp)) or 
    die (sprintf("XML Error: %s at line %d", 
    xml_error_string(xml_get_error_code($parser)), 
    xml_get_current_line_number($parser))); 
    } 

XML-возвращаемый выше FOPEN вызова, как this.The Xml не имеют кодировку набора сверху. Вышеприведенный код выводит XML-ошибку: недопустимый символ в строке 1008 в браузере.

<entries> //root element 
    <entry> 
    <TITLE><![CDATA[xxxx yyyyyyyyyy]]></TITLE> 
    </entry> 
    <entry> 
    <TITLE><![CDATA[xxxx Gold… yyyyyyyyyy]]></TITLE>//this is line no 1008 that returns invalid character error and script stops 
    </entry> 
</entries> 

Я думаю, что это может быть связано с эллипсов, потому что когда я откладываю XML вернулся в локальный файл в блокноте ++, а затем кормить файл, который XML выше анализатор работает хорошо.

Я хочу, чтобы запустить этот XML непосредственно из URL вместо сохранения его в папку, потому что будет над головой я не need.Thanks

ответ

0

Убедитесь, что веб-сервер вы потянув файл из посылает правильная кодировка символов, когда она обслуживает страницу. Вы должны увидеть что-то вроде этого в заголовках ответа:

Content-Type:"text/xml; charset=utf-8" 

Заголовки могут быть просмотрены в сети панели инспектора в любом современном браузере, когда вы запрашиваете файл XML напрямую.

Вы также должны указать кодировку в самом файле. Первая строка должна выглядеть примерно так:

<?xml encoding='UTF-8'?> 

Если это не помогает, вы всегда можете попробовать использовать utf8_decode(), которая является функцией XML_Parser, который будет пытаться преобразовать данные в ISO-8859-1.

+0

У меня нет никакого контроля над сервером на данный момент. Поэтому настройка информации заголовка невозможна. Хотя я могу добавить После получения XML-данных с сервера, а затем передавая данные в синтаксический анализатор. Есть ли другой способ, которым я могу это сделать. –

+0

Проверьте эти два элемента, и я также добавил последнее предложение; Я не использовал функции XML Parser много, так как я нахожу SimpleXML намного ... проще! – miken32

+0

Я сделал utf8_decode(), и он сработал. Спасибо за помощь и развитие сообщества. –

Смежные вопросы