Непонятная проблема с обработкой строк [PHP]

1. Антон (01.07.2013 / 19:33)
Доброго времени суток всем!
Пишу парсер для сайта, кодировка у сайта UTF-8, у моих скриптов аналогичная, идем дальше.. Получаю зашифрованные данные от сайта в виде таких строк
\u0028\u0066\u0075\u006e\
Разбираю их следующим способом
function replace_unicode_escape_sequence($match) {
    return mb_convert_encoding(pack('H*', $match[1]), "UTF-8", "auto");
}
$coded = preg_replace_callback('/\\\\u([0-9a-f]{4})/sU', 'replace_unicode_escape_sequence', $coded);
После перекодировки с данным не возможно работать, preg_match() вообще не обращает внимания ни на какие регулярки.. К примеру, после раскодирования на выходе получаю json данные, пробую их декодировать в массив при помощи функции json_decode(), функция мне возвращает NULL то есть нет данных для вывода, хотя если эти самые json данные указать напрямую в скрипте
print_r(json_decode('json строка'));

То они успешно декодируются в нужный мне массив. Пните плиз в правильном направлении, а то уже 2 часа сижу гуглу надоедаю..

2. Алексей (01.07.2013 / 19:39)
Создай файл заново и вставь в него готовый код или имя файла смени.

3. Антон (01.07.2013 / 19:46)
2. ByKuznec, сори не осилил твой пост.. При чем тут файл?

4. Кевин Митник (01.07.2013 / 19:57)
вроде как ты ищешь регуляркой в бинарной строке?

5. Антон (01.07.2013 / 19:59)
4. Кевин Митник_HHTeam, разве в бинарной? При выводе данных в браузер они нормально отображаются..

6. Кевин Митник (01.07.2013 / 20:02)
Вот это - \u0028\u0066\u0075\u006e\ - 16ричная система. Ты функцией pack преобразовываешь в двоичную

7. Алексей (01.07.2013 / 20:02)
3. WmLiM, при том, что если файл сохраняешь в несколько раз в разных кодировках, то на выводе может получится ошибка. В самого была подобная ситуация, делал все верно, а оно не работало должным образом. Теперь осилил?

8. колбаса (01.07.2013 / 20:06)
ох и не лёгкая это работа

9. Антон (01.07.2013 / 20:11)
7. ByKuznec, ты когда парсишь данные с другого сайта, вначале разбираешь ответ по полочкам и потом сохраняешь в файл или наоборот? Осилил? В первом посте написанно что трабл возникает на этапе обработки ответа.

Добавлено через 01:29 сек.
6. Кевин Митник_HHTeam, вот за дельный совет спасибо тебе)) Пойду проверю...

10. Кевин Митник (01.07.2013 / 20:14)
ТС, последовательность операций не верная.
1. Данные, а именно 16-ричное представление очищаешь от \u.
2. Обработка hex2bin. На выходе двоичные данные.
3. Изменение кодировки

Добавлено через 01:09 сек.
я только что проверил. работает

11. Антон (01.07.2013 / 20:19)
Кевин Митник_HHTeam (2 Июля 2013 / 01:14)
2. Обработка hex2bin. На выходе двоичные данные.
С сайта php.net
Предостережение
Эта функция НЕ конвертирует шестнадцатиричные числа в двоичные. Если нужно именно это, используйте функцию base_convert().


12. Кевин Митник (01.07.2013 / 20:27)
11. WmLiM, так оно тебе и не нужно) но можно и другую ф-цию использовать. Суть в результате.

13. Антон (01.07.2013 / 20:28)
12. Кевин Митник_HHTeam, та да, спасибо за помощь))

14. Кевин Митник (01.07.2013 / 20:59)
незачто)

15. Антон (02.07.2013 / 16:10)
14. Кевин Митник_HHTeam, все оказалось намного проще чем я думал, то что я пытался раскодировать была закодированная json строка в UTF-8 кодировке. Раскодируется таким способом
$coded = utf8_encode($coded);
$data = json_decode('{"decoded":"'.$coded.'"}', true);


URL: https://visavi.net/topics/38319