Пропадают пробелы при перекодировании текста

A
На сайте с 18.10.2007
Offline
125
1365

Парсю RSS-файл, отдающийся в UTF-8, перекодирую с помощью iconv в 1251 - на выходе текст без пробелов. Вернее часть пробелов все же остается - между знаками препинания и текстом, между цифрами и текстом, а между словами пропадают. В чем хитрость, кто подскажет? А то не кодер я совсем.

Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
[umka]
На сайте с 25.05.2008
Offline
456
#1

а в самом файле пробелы на месте?

Лог в помощь!
A
На сайте с 18.10.2007
Offline
125
#2

[umka], да, в самом файле на месте. Собственно, сам файл - это рсс-лента микроблога в твиттере.

[umka]
На сайте с 25.05.2008
Offline
456
#3

тут только два варианта:

или всё-таки кривые данные на входе

или глючный iconv на сервере

[umka] добавил 01.12.2010 в 13:55

кстати, если rss идёт xml-файлом, и там в нём указана кодировка (например: <?xml version="1.0" encoding="utf-8"?>), а вы берёте, да и конвертируете файл в cp1251 с помощью iconv, то перед тем, как парсить xml, необходимо параметр encoding заменить.

A
На сайте с 18.10.2007
Offline
125
#4

[umka], я меняю не кодировку файла, а кодировку выводимой строки. На самом деле, сейчас я обратил внимание, что проблема возникает еще до этапа перекодировки - при парсинге. Я использую XML Parser Functions.

[umka]
На сайте с 25.05.2008
Offline
456
#5

Стало быть, первый вариант :) "или всё-таки кривые данные на входе"

A
На сайте с 18.10.2007
Offline
125
#6

Воспользовался SimpleXML, проблема исчезла. [umka], спасибо за участие=)

Ёхан Палыч
На сайте с 07.05.2006
Offline
169
#7
alarm:
сам файл - это рсс-лента микроблога в твиттере

Есть такая бага в связке апи твиттера и XML Parser.

Лечится XML_OPTION_SKIP_WHITE ставится в 0, правда могут возникнуть ошибки с пустыми строками, поэтому сначала надо создать DOMDocument без пробелов между тэгами.

Рабочий пример:

function xmlParser($xmlData){

$returnValue = array();
if(!is_array($xmlData)){
$dom = new DOMDocument();
$dom->preserveWhiteSpace = false;
$dom->loadXML($xmlData);
$xmlData = $dom->saveXML();
$rawXml = $xmlData;
$parser = xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 0);
//и т.д.

}
A
На сайте с 18.10.2007
Offline
125
#8

Ёхан Палыч, cпасибо, учту на будущее.

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