Определение кодировки curl страницы


Форум PHP программистов ► PHP практикум ► PHP для начинающих

Пейджер выключен!

Подписаться на тему
Уведомление на e-mail об ответах в тему, во время Вашего отсутствия на форуме.

Подписка на этот форум
Уведомление на e-mail о новых темах на форуме, во время Вашего отсутствия на форуме.

Скачать/Распечатать тему
Скачивание темы в различных форматах или просмотр версии для печати этой темы.

Кодирование запроса CURL в PHP

У меня есть некоторые незначительные проблемы с кодировкой. Я получаю строку данных json отсюда (попробуйте сами):

Имя в данных показано следующим образом:

Как я могу получить эти данные с надлежащей кодировкой, чтобы его Ари Скуласон?

Я попытался переключить его на utf-8, как это в php

который приблизил меня, но его все еще не так

установите еще один параметр curl для CURLOPT_ENCODING и установите для него значение «», чтобы гарантировать, что он не вернет мусор

Вы можете использовать заголовок

и после строки декодирования

Это сработало для меня

после добавить это

Вы также можете попробовать.

utf8_encode закодированный символ ASCII. Возврат некодированного ASCII может привести к поломке или возврату ошибки (в моем случае).

php — Как исправить кодировку сайта в ответ на cURL запрос?

Пожалуйста, помогите победить кодировку.

Проблема следующая, в ответ на curl приходит сайт в котором в meta прописана кодировка windows-1251 из-за этого на сайте отображаются иероглифы. Данную проблему решил с помощью:

Теперь если в meta стоит кодировка windows-1251 сайт отображается корректно. Если в meta стоит кодировка utf-8 сайт отображается корректно. Обрадовался. Но вдруг нашел пару сайтов, которые слетели после добавления:

в meta указана кодировка UTF-8 а сайт в результате в иероглифах, пример такого сайта: http://e-qa.ru/autoprodazha

Таких сайтов не много но они есть и очень раздражают, большинство сайтов где в meta UTF-8 работают корректно. Видимо кодировка самого файла у данного сайта e-qa.ru/autoprodazha отличается от указанной в meta из-за этого происходит конфликт.

Помогите разобраться и устранить иероглифы на всех сайтах, кучу методов перепробовал и все взаимоисключающие :(

Определение кодировки curl страницы

С помощью curl получаю данные со стороннего сайта, изначально его кодировка не известна. В случае если кодировка windows-1251 получаю не читаемый сайт (испорчена кодировка), мне нужно отображать utf-8.

iconv(«windows-1251», «UTF-8», $post); — помогает, НО если изначально кодировка и так utf-8 сайт я не получаю — белая страница.

curl_setopt($rCurl, CURLOPT_ENCODING, ‘gzip,deflate’); — не помогло вообще.

Нашел как мне кажется решение моей проблемы:

Как я понял, данная функция должна определить изначальную кодировку и потом, при необходимости изменить ее, но совладать с этим кодом я не смог.
Я не понял, где нужно задать нужную мне UTF-8 кодировку.
Мне кажется, что из строки $tab = array нужно удалить UTF-8, так как именно эта кодировка мне и нужна.

Пробовал еще так сделать:

function convert_utf8( $post ) <
if ( strlen(utf8_decode($post)) == strlen($post) ) <
// $string is not UTF-8
return iconv(«windows-1251», «UTF-8», $post);
> else <
// already UTF-8
return $post;
>
>
echo $post;

Сделал так и решил проблему:

$isWinCharset = mb_check_encoding($post, «windows-1251»);
if ($isWinCharset) <
$post = iconv(«Windows-1251», «UTF-8», $post);
>

Потом нашел пару сайтов, где код не помог.
В мета у сайтов стоит кодировка utf-8 но сам файл видимо в другой кодировке, из-за чего на сайте появляются иероглифы, пример такого сайта:
indikator.one-trading.ru

$isWinCharset = mb_check_encoding($post, «windows-1251»);
if ($isWinCharset) <
$post = iconv(«Windows-1251», «UTF-8», $post);
>

то сайт отображается корректно НО слетают сотни других, которые изначально в Windows-1251 кодировке.


Можно как-то зафиксировать эту проблему, возможно я что-то не так понимаю и сайт indikator.one-trading.ru на самом деле в utf-8 кодировке, тогда в чем проблема?

Может в строке $isWinCharset = mb_check_encoding($post, «windows-1251»);
прописать несколько кодировок, чтобы угадать нужную, как?

Определение кодировки curl страницы

Joined: 29 May 2006
Posts: 31

Posted: Thu Jun 22, 2006 9:48 am ( написано за 2 минуты 54 секунды )
Post subject: Кодировка русских символов и применение CURL
Делаю запрос страницы(test.php), где есть русские символы и отображаются нормально, когда вывожу на экран получается ерунда. Как можно кодировку поправить? Спасибо.

$headers = array (www.php.net/array) ( ‘Content-type: text/html; charset=windows-1251’ ) ;

$url = «https://test.ru/test.php» ;
$requestString = «var1=1&var2=2» ;
$ch = curl_init ( ) ;
curl_setopt ( $ch , CURLOPT_URL, $url ) ;
curl_setopt ( $ch , CURLOPT_RETURNTRANSFER, 1 ) ;
curl_setopt ( $ch , CURLOPT_TIMEOUT, 15 ) ;
curl_setopt ( $ch , CURLOPT_POST, 1 ) ;
curl_setopt ( $ch , CURLOPT_SSL_VERIFYPEER, 0 ) ;
curl_setopt ( $ch , CURLOPT_SSL_VERIFYHOST, 0 ) ;
curl_setopt ( $ch , CURLOPT_HTTPHEADER, $headers ) ;
curl_setopt ( $ch , CURLOPT_POSTFIELDS, $requestString ) ;

$result = curl_exec ( $ch ) ;
curl_close ( $ch ) ;
echo (www.php.net/echo) $result ;

Code ( php ): скопировать код в буфер обмена
Илон Маск рекомендует:  Что такое код vpopmail_del_domain
Back to top VAFil
Участник форума

Joined: 25 May 2006
Posts: 52

Location: Москва

Posted: Thu Jun 22, 2006 9:56 am ( спустя 8 минут ; написано за 17 секунд )
Post subject:
Смотрите в сторону iconv (www.softtime.ru/group/ >
Back to top Organ
Участник форума

Joined: 29 May 2006
Posts: 31

Posted: Thu Jun 22, 2006 10:09 am ( спустя 12 минут ; написано за 57 секунд )
Post subject:
К сожалению, функции iconv мне недоступны версия PHP 4, видимо
Back to top VAFil
Участник форума

Joined: 25 May 2006
Posts: 52

Location: Москва

Posted: Thu Jun 22, 2006 10:16 am ( спустя 6 минут ; написано за 3 минуты 28 секунд )
Post subject:
Organ
А в каком именно виде выводится ерунда. Если в одной из кирилических кодировок (естественно неверно отображающихся, раз кодировка в заголовке windows-1251), то возможно поможет функция convert_cyr_string(). softtime.ru/bookphp/gl3_7.php
Еще можно попробовать переводить все русские символы в их юникод-сущности. Но это будет нещадно кушать трафик — на каждый байт занимаемый русской буквой будет приходится 7 байт юникод-сущности. Если же хотите — код могу дать. =)
Back to top Organ
Участник форума

Joined: 29 May 2006
Posts: 31

Posted: Thu Jun 22, 2006 10:29 am ( спустя 13 минут ; написано за 1 минуту 50 секунд )
Post subject:
Страница нормально отображается в utf-8. А когда делаю запрос curl’ом, приходит эта страничка в кодировке Cyrillic(WINDOWS). Функция convert_cyr_string не переводит в unicode.. Кстати с трафиком проблем нет-этот хитрый запрос делается по локалу.
Back to top VAFil
Участник форума

Joined: 25 May 2006
Posts: 52

Location: Москва

Posted: Thu Jun 22, 2006 10:43 am ( спустя 13 минут ; написано за 3 минуты 4 секунды )
Post subject:
Organ
Вы уверены что результат возвращается имеено в WINDOWS-1251. Какое header возвращает curl. Я вообще в curl не особо, но если страница test.php отображается в utf-8 (если я правильно понял), то зачем отправлять (а ведь как мне кажется curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); именно отправляет заголовки) заголовок с charset=windows-1251.
PS: Если я не прав, прошу прощения и жду указаний на ошибки. =)
Back to top Organ
Участник форума

Joined: 29 May 2006
Posts: 31

Posted: Thu Jun 22, 2006 10:47 am ( спустя 3 минуты ; написано за 2 минуты 47 секунд )
Post subject:
Зашел на страницу test.php. Кодировка-utf8. Все нормально. Попереключал кодировки. Получил ту ерунду, что выводится с кодировкой cyrillic(windows). А те $headers я пробовал менять на utf-8, потом убрал- не помогло. Пробовал также echo utf8_encode($result). Тоже безрезультатно.
Back to top VAFil
Участник форума

Joined: 25 May 2006
Posts: 52

Location: Москва

Posted: Thu Jun 22, 2006 10:58 am ( спустя 11 минут ; написано за 2 минуты 13 секунд )
Post subject:
Вставьте эту опцию —

Code ( php ): скопировать код в буфер обмена

И посмотрите какие заголовки возвращаются вместе с файлом.
А еще попробуйте перед выводом результата послать браузеру заголовок

Code ( php ): скопировать код в буфер обмена
Back to top Organ
Участник форума

Joined: 29 May 2006
Posts: 31

Posted: Thu Jun 22, 2006 11:01 am ( спустя 3 минуты ; написано за 10 секунд )
Post subject:
хедеры вот:

HTTP/1.1 100 Continue Server: Microsoft-IIS/4.0 Date: Thu, 22 Jun 2006 07:59:12 GMT HTTP/1.1 200 OK Server: Microsoft-IIS/4.0 Date: Thu, 22 Jun 2006 07:59:13 GMT Connection: close Content-Type: text/html Content-Length: 4203 Content:

А строка с хедером не дала результатов.

Back to top VAFil
Участник форума

Joined: 25 May 2006
Posts: 52

Location: Москва

Posted: Thu Jun 22, 2006 11:05 am ( спустя 3 минуты ; написано за 2 минуты 17 секунд )
Post subject:
Хммм. Даже не знаю что посоветовать еще. Попробуйте аналогичный заголовок выводить в test.php — в заголовках ответа не указана вообще никакая конкретная кодировка. А вообще советую обновить версию PHP и пользоваться iconv. =)
Back to top Organ
Участник форума

Joined: 29 May 2006
Posts: 31

Posted: Thu Jun 22, 2006 11:11 am ( спустя 5 минут ; написано за 1 минуту 56 секунд )
Post subject:
Так вся фишка в том, что «test.php» формируется фастрепортом и экспортом его в html, а у фильтра экспорта нигде кодировки нету :(.
Ладно, спасибо за помощь буду искать. Придется думаю этот экспортированный файл разобрать и заменить кодировку. Гимор конечно, а что делать.
Back to top Organ
Участник форума

Joined: 29 May 2006
Posts: 31

Posted: Thu Jun 22, 2006 11:21 am ( спустя 10 минут ; написано за 43 секунды )
Post subject:
Поменял кодировку на windows-1251, а без толку все равно показывает UTF-8..
Back to top VAFil
Участник форума

Joined: 25 May 2006
Posts: 52

Location: Москва

Posted: Thu Jun 22, 2006 11:34 am ( спустя 12 минут ; написано за 1 минуту 14 секунд )
Post subject:
Organ
В приложении функция — она переводит все русские символы в юникод-сущности. Попробуйте перед выводом $result через нее пропустить. =)

cyr_to_unicod.txt
Description:
Функция переводит все русский символы в их unicod сущности
Download
Filename: cyr_to_unicod.txt
Filesize: 1.04 KB
Downloaded: 547 Time(s)


Back to top Organ
Участник форума

Joined: 29 May 2006
Posts: 31

Posted: Thu Jun 22, 2006 11:40 am ( спустя 5 минут ; написано за 29 секунд )
Post subject:
Понравилось «все русский символы» ). После этой функции совсем ерунда получается.
Back to top VAFil
Участник форума

Joined: 25 May 2006
Posts: 52

Location: Москва

Posted: Thu Jun 22, 2006 11:46 am ( спустя 6 минут ; написано за 1 минуту 23 секунды )
Post subject:
Organ
Мда, опечатался.. =)
Странно. Ну, тогда у меня идеи кончились. =( Желаю удачи. Если найдете решение — рад буду узнать какое.. =)

Last edited by VAFil on Thu Jun 22, 2006 11:58 am; edited 1 time in total

Back to top Organ
Участник форума

Joined: 29 May 2006
Posts: 31

Posted: Thu Jun 22, 2006 11:56 am ( спустя 10 минут ; написано за 2 минуты 45 секунд )
Post subject:
Как найду решение, напишу ).

У кого-нибудь есть идеи? Мои предположения:

1. Кодировку где-то устанавливает CGI-шка, экспортирующая отчет, хотя не нашел где.
2. Сорц у запрашиваемого файла нормальный, а приходит ерунда. Может, что-то с Апачем..

Спасибо.

Back to top Organ
Участник форума

Joined: 29 May 2006
Posts: 31

Posted: Thu Jun 22, 2006 2:12 pm ( спустя 2 часа 15 минут ; написано за 1 минуту 29 секунд )
Post subject:
Проблема решена! Дело было в автоустановке кодировки русского апача. Проблема описана тут:
live.julik.nl/2004/05/stop_mod_charset

Установил указанный строчки в конфигурационный файл(то есть отключил автокодировку) и все заработало
а так апач просто игнорил то, что я ставил utf-8.

cURL и кириллица!

Почему, когда при помощи curl запрашиваю html-код какой-нибудь страницы, кириллические символы возвращаются вопросиками?

Пишу на с++. Результат выводится в терминал. Введи в терминале curl www.nix.ru и увидишь их.

Эти быдлокодеры не указали в html кодировку.

Там кодировка windows 1251, а в linux обычно utf8.

Пишу на с++. Результат выводится в терминал. Введи в терминале curl http://www.nix.ru и увидишь их.

Всё правильно. У тебя в терминале кодировка utf-8, а сервер выдаёт страничку в кодировке cp1251. Попробуй так (в терминале):

Эти быдлокодеры не указали в html кодировку.

Они её указали в HTTP-заголовках:

char c[] = «www.nix.ru»; string s = download_page(c); cout ( 14.02.10 20:27:39 )

Так чтоб в s уже приходил нормальный кириллический текст.

Могу ли я как-нибудь в curl задать нужную кодировку?

Нет, это просто вне компетенции libcurl.

Помогите написать входные параметры для iconv(). string s — входная строка, string ss — выходная.

Получение правильной кодировки из php cURL

(см. обновление внизу сообщения)

Используя регистратор сети Chrome, я замечаю данный запрос XHR:

Запросить заголовки

Заголовки ответов

Содержание ответа: @EqV¡^MSÁ9

Отлично. Это правильный вывод.

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

Однако выход здесь равен @EqV–¡^MSƒÁ9 , что явно отличается.


Мне нужно получить его в исходном формате ( @EqV¡^MSÁ9 ), потому что в конечном итоге вывод PHP будет обслуживаться скрипту javascript, а значение charCodeAt имеет разные результаты между этими двумя charCodeAt . Я не уверен, как подойти к этой проблеме.

Как вы можете видеть, после запроса XHR предварительный просмотр ответа в Chrome правильный:

Если я изменил тип кодирования вывода моей PHP-страницы на @EqV¡^MSÁ9 (ISO-8859-15), я получаю @EqV¡^MSÁ9 .

И если я вставляю этот вывод в Notepad++, я получаю что-то очень, очень похожее на то, что хочу, но все же немного другое (в данном случае разное на один символ). Может быть, это очень близко к кодировке, в которой я нуждаюсь?

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

UPDATE: я тестировал новое значение: òÝD¶0v¢ÔL·ßÎO Ó , и использование mb_convert_encoding($r, ‘utf-8’, ‘ISO-8859-15’) дало мне правильный результат. Так почему же кодирование этого конкретного ответа ( @EqV¡^MSÁ9 ) дает мне значение, которое является коротким символом?

php — Как исправить кодировку сайта в ответ на cURL запрос?

Пожалуйста, помогите победить кодировку.

Проблема следующая, в ответ на curl приходит сайт в котором в meta прописана кодировка windows-1251 из-за этого на сайте отображаются иероглифы. Данную проблему решил с помощью:

Теперь если в meta стоит кодировка windows-1251 сайт отображается корректно. Если в meta стоит кодировка utf-8 сайт отображается корректно. Обрадовался. Но вдруг нашел пару сайтов, которые слетели после добавления:

в meta указана кодировка UTF-8 а сайт в результате в иероглифах, пример такого сайта: http://e-qa.ru/autoprodazha

Таких сайтов не много но они есть и очень раздражают, большинство сайтов где в meta UTF-8 работают корректно. Видимо кодировка самого файла у данного сайта e-qa.ru/autoprodazha отличается от указанной в meta из-за этого происходит конфликт.

Помогите разобраться и устранить иероглифы на всех сайтах, кучу методов перепробовал и все взаимоисключающие :(

Определение кодировки curl страницы

Здесь могла бы быть ваша реклама

Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel

Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.

Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо

После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..

Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.

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

На последок как оно происходит на форумах

Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.

Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12

cURL и кириллица!

Почему, когда при помощи curl запрашиваю html-код какой-нибудь страницы, кириллические символы возвращаются вопросиками?

Пишу на с++. Результат выводится в терминал. Введи в терминале curl www.nix.ru и увидишь их.

Эти быдлокодеры не указали в html кодировку.

Там кодировка windows 1251, а в linux обычно utf8.

Пишу на с++. Результат выводится в терминал. Введи в терминале curl http://www.nix.ru и увидишь их.

Всё правильно. У тебя в терминале кодировка utf-8, а сервер выдаёт страничку в кодировке cp1251. Попробуй так (в терминале):

Эти быдлокодеры не указали в html кодировку.

Они её указали в HTTP-заголовках:

char c[] = «www.nix.ru»; string s = download_page(c); cout ( 14.02.10 20:27:39 )

Так чтоб в s уже приходил нормальный кириллический текст.

Могу ли я как-нибудь в curl задать нужную кодировку?

Нет, это просто вне компетенции libcurl.

Помогите написать входные параметры для iconv(). string s — входная строка, string ss — выходная.

Илон Маск рекомендует:  array_slice - Выбрать срез массива
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL