Кодировка евро - PHP

Я пробовал много разных вещей и не могу показать символ евро. Я использую cURL для разбора страницы. Страница закодирована в ISO-8859-1

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">

На странице есть символ евро, и когда я использую

$curl_scraped_page = curl_exec($ch);

Я просто получил черный бриллиант с вопросительным знаком внутри.

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

РЕДАКТИРОВАТЬ: я пытался использовать следующее:

$curl_scraped_page = preg_replace('/charset=(.*)"/', 'charset="UTF-8"', $curl_scraped_page);

а также

$curl_scraped_page = iconv('iso-8859-1', 'UTF-8', $curl_scraped_page);

а также

$curl_scraped_page = utf8_encode(curl_exec($ch));

Я предполагаю, что другой вопрос, для отображения знака евро, мне нужно использовать UTF-8 или ISO-8859-1?

EDIT2: я пробовал это:

echo "Encoding is $enc";
echo iconv($enc, "ISO-8859-1", $curl_scraped_page);

Результат был:

Encoding is ISO-8859-1

но все еще не было символов евро. Когда я просматриваю источник страницы, он все еще показывает вопросительные знаки с бриллиантами, но когда я нажимаю "Просмотр" в браузере и меняю его на ISO-8859-1, появляются символы евро. Так это проблема браузера?

5 ответов

Решение

Я устанавливаю cURL для разбора в кодировке ISO-8859-1, прежде чем выполнять синтаксический анализ cURL

header('Content-Type: text/html; charset=iso-8859-1');
$curl_scraped_page = curl_exec($ch);

Это означает, что он принимает символ евро в том виде, как он есть на странице. Затем, когда я повторяю содержимое с символом евро, мне не нужно беспокоиться о кодировке, потому что я думаю, что она автоматически форматируется в соответствии с той кодировкой, которую я использую.

Просто подать заявку htmlentities(curl_exec($ch))Это не сломается на специальных символов

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

$header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; 
curl_setopt($ch, CURLOPT_HTTPHEADER, $header); 

возможно, что curl сделает по умолчанию соединение "UTF-8".

Редактировать:

Что происходит, когда вы конвертируете его в iso с помощью "utf8_decode"?

PHP: curl_setopt

Просто добавьте ту же мета-декларацию Content-Type на веб-страницу, на которой вы просматриваете найденную страницу.

Веб -браузеры не используют метатег для определения набора символов, если только отсутствует заголовок http, который объявляет набор символов. Это запасной вариант, и большинство веб-серверов указывают кодировку через заголовок http, поэтому на практике метатеги обычно игнорируются.

Я говорю: эта страница может быть другой кодировкой.

Проверьте заголовки http. Затем объявите свою страницу для сопоставления, опять же, через заголовки http, а не через метатег. Или преобразовать строку в нужную вам кодировку.

Другие вопросы по тегам