simplexml_load_file и проблема с кодировкой - PullRequest
2 голосов
/ 10 марта 2010

SimpleXML преобразует весь текст в UTF-8, если в исходной декларации XML есть другая кодировка. Таким образом, весь текст в результирующем элементе SimpleXMLEle будет автоматически добавлен в UTF-8.

В моем случае источник имеет следующий XML-код:

<?xml version="1.0" encoding="windows-1251" ?>

Что я должен сделать, чтобы получить нормальный вывод? Потому что, как вы можете себе представить, сейчас я получаю странные символы.

Спасибо.

Ответы [ 4 ]

0 голосов
/ 10 марта 2010

Мой совет - использовать UTF-8 в качестве исходной кодировки файлов .php и (если возможно) также выходной кодировки. С помощью сжатия gzip разница между размерами ответов windows-1251 и UTF-8 (даже для в основном кириллического текста) минимальна, а UTF-8 лучше во многих отношениях. Как вы сказали, simplexml преобразует windows-1251 в UTF-8 при импорте xml, и вам не нужно беспокоиться о каких-либо кодировках.

Если у вас есть для использования windows-1251 для вывода, используйте что-то вроде: iconv_set_encoding ("internal_encoding", "UTF-8"); iconv_set_encoding («output_encoding», «windows-1251»); ob_start ( "ob_iconv_handler");

Единственное исправление для UTF-8 в исходных файлах PHP - это классы символов в регулярных выражениях: /[ю]/ не будет работать, как вы могли ожидать, /(ю)/ будет.

0 голосов
/ 10 марта 2010

Попробуйте использовать iconv для преобразования кодировки.

0 голосов
/ 10 марта 2010

Используя функцию iconv (), которую вы можете конвертировать из одной кодировки в другую, опция TRANSLIT может работать.

$xml = {STRING CONTAINING YOUR XML FILE DATA};

<?php

// convert string from utf-8 to iso8859-1
//$xml = iconv( "UTF-8", "ISO-8859-1//TRANSLIT", $xml);
$xml = iconv( "YOUR_ENCODING", "UTF-8//TRANSLIT", $xml);

?>
0 голосов
/ 10 марта 2010

Возможно глупый ответ, но просто не используйте SimpleXML. Просто используйте DOM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...