2010-03-10 2 views
2

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

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

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

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

Спасибо.

ответ

0

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

+0

как я могу использовать dom вместо этого? – Codex73

0

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

+0

Здесь может быть использован фрагмент кода примера. – slashingweapon

0

Используя функцию 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

Мой совет - использовать UTF-8 в качестве источника .php-кодирования файлов и (если возможно) выходного кодирования. С разницей сжатия gzip между размерами ответов windows-1251 и UTF-8 (даже в основном для кириллического текста) минимальна, а UTF-8 - во многих отношениях. Как вы сказали, simplexml преобразует окна-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 - это классы char в regexps: /[ю]/ не будет работать так, как вы могли ожидать, /(ю)/ будет.

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