Кодировка евро - 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"?
Просто добавьте ту же мета-декларацию Content-Type на веб-страницу, на которой вы просматриваете найденную страницу.
Веб -браузеры не используют метатег для определения набора символов, если только отсутствует заголовок http, который объявляет набор символов. Это запасной вариант, и большинство веб-серверов указывают кодировку через заголовок http, поэтому на практике метатеги обычно игнорируются.
Я говорю: эта страница может быть другой кодировкой.
Проверьте заголовки http. Затем объявите свою страницу для сопоставления, опять же, через заголовки http, а не через метатег. Или преобразовать строку в нужную вам кодировку.