Спарсил сайт. Указана кодировка iso-8859, однако перекодировка в utf-8 дает кракозябры. Начал проверять углубленно - получилось, что сайт закодирован в ASCII, но не могу перекодировать ее в utf-8. Вручную, конечно, сделать можно, но парсинг не разовый, поэтому каждый раз перекодировать гигабайт информации некошерно. Отсюда вопрос: как перекодировать из ascii в utf-8 с помощью PHP? Понимаю, что acsii является частью utf-8, но jsonencode это почему-то не понимает и отказывается перекодировать текст.
maiskiykot, во-первых, то, что что-то указано, не означает, что так и есть. Во-вторых, вы знаете, сколько здесь вопросов, которые полностью от балды сформулированы, особенно - про кодировки? Вот я и пытаюсь выяснить, что же на самом деле тут за ситуация. Ну и это, 8859-что? Их десяток. И да, 8859-5 на русскоязычных сайтах я, естественно, видел.
SagePtr, я намекаю на то, что ни mb_convert_encoding, ни iconv не перекодирует текст в utf-8, а т.к. мне надо перегнать этот текст (а точнее гигантский массив) в json, то этот номер у меня не проходит, потому что jsonencode понимает только utf-8.
SagePtr, А где я сказал, что текст невалидный? Он прекрасно читается, прекрасно записывается, просто он в ASCII. Я проверил кодировку на компе. Проблема в том, что мне надо на лету перекодировать текст в utf-8 а ни один перекодировщик не справляется - либо кракозябры, либо ничего. В итоге я не могу получить json, ради которого я и парсю сайт.
maiskiykot, можно минимальный кусок кода, на котором воспроизводится проблема? Ибо я ваш текст успешно скормил функции json_encode и никакой проблемы с ним не возникло.
SagePtr, я так понял, ТС пытается json_encode($array), а в скормленном нам файле — кусок выхлопа serialize($array), причём выхваченный вообще из середины, с 99 по 245 элементы, строки обрублены. Так что пока только гадать можно.
И все-таки парадоксальный результат вышел из этой истории. Сайт упирался всеми своими фибрами или чем там еще. Нормальный результат удалось получить только с помощью iconv и принудительной перекодировки в UTF-8. Только после этого заработали все функции. Вот тебе, бабушка, и Юрьев день!
Мистика. Либо на сайте на самом деле разные кодировки, а он их выставляет за iso-8859-1. Хотя если выкинутые страницы на сайте выглядят аналогично невыкинутым, то всё-таки мистика.
Ну, верное направление вы нащупали, успехов в труде.
100% результат все равно не могу получить. То одна страница выпадает, то другая. Или это какая-то игра с кодировками на сайте или что. Банальные урлы не могу вытянуть. Больше 10 лет парсю сайты - первый раз такой геморрой.
ThunderCat, Гигабайт на входе примерно. На выходе меньше намного. Ошибки нет никакой. Просто функция json_encode не отрабатывает из-за кодировки. Когда я пытался из iso-8859 перекодировать в utf-8 - json записался, но в кракозябрах. Это, конечно, не вариант.
Не находите что тут у вас противоречие? Либо ошибки нет, и кодирование отрабатывает, либо ошибка есть, тогда естественно не работает, и надо смотреть ошибку.
maiskiykot, не тупите, все что не выполняется выводит ошибку, то что вы ее не видите не означает что ее нет, для этого есть логи. + Я бы для начала разбил задачу на несколько и проверял по шагам:
1) Получить НЕБОЛЬШУЮ строку с сайта.(вывести что получилось, в дальнейших итерациях уже увеличивать)
2) Проверить строку на соответствие утф(mb_detect_encoding())
3) закодить в жсон
4) Profit
Попробую разбить на части, но для меня это не выход - мне нужен весь массив данных. Проверял на соответствие - пишет utf-8. Почему я подумал на кривую кодировку, потому что при перекодировке из iso-8859 в utf-8 json создался только в кракозябрах, поэтому объем тут не при чем.
maiskiykot, а кто сказал что выход? Просто вы пытаетесь решить задачу которой скорее всего нет. Во первых как вы запускаете скрипт? Из cli или через браузер? Во вторых, если вам не понятна суть поиска ошибок в логах, то первыми строками вашего скрипта должно быть: