file_get_contents () нарушает кодировку ISO-8859-1

Я пытаюсь прочитать страницу с помощью file_get_contents (), но не могу заставить работать кодировку символов.

это мой код:

    $username = "masked";
$password = "maskedPass";
$remote_url = 'https://utfws.utfpr.edu.br/aluno01/sistema/mplistahorario.inicio?p_curscodnr=212';

// Create a stream
$opts = array(
'http'=>array(
'method'=>"GET",
'header' => array(
"Authorization: Basic " . base64_encode("$username:$password"),
'Accept-Charset: iso-8859-1'
)

)
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents($remote_url, false, $context);

echo $file;

Я пытался изменить кодировку символов на utf-8, но я всегда получаю страницу с вопросительными знаками вместо слов.

Когда я открываю страницу прямо в моем браузере, она работает просто отлично. Почему это происходит?

0

Решение

Мне кажется, что это может быть просто проблемой утраченных деталей кодирования.

То, что вы описываете:

  1. запросить документ с веб-сервера, указав кодировку 8859-1
  2. сервер отвечает документом в запрошенной кодировке, включая заголовок, указывающий кодировку является 8859-1. Это будет выглядеть правильно в браузере.
  3. выходной документ (но не данные заголовка!) из php (куда это идет, не указан
  4. открыть данные в какой-то вид зрителя.

Видите, где была потеряна спецификация кодирования, там на шаге 3?

Данные могут быть правильно декодированы с помощью 8859-1, но только будут быть декодирован с помощью 8859-1, если средство просмотра настроено на использование этой кодировки по умолчанию. Некоторые приложения могут иметь значение по умолчанию 8859-1, но UTF-8 в наши дни встречается гораздо чаще.

Если вы загрузите данные в другой механизм хранения, скажем, mysql, проблема может усугубиться. mysql связывает кодировку с текстовыми данными. Если в вашей базе данных по умолчанию используется utf-8, и вы не говорите, что данные на самом деле находятся в 8859-1, но вы не говорите, что данные находятся в 8859-1, теперь вы отправляете им данные, которые предполагаются быть в UTF-8, и данные будут обрабатываться как таковые в базе данных в будущем. Теперь, даже если в будущем вы запросите базу данных для 8859-1, данные будут перекодированы с utf-8 до 8859-1, но это не действительно utf-8 — это еще один некорректный набор байтов.

Чтобы решить эту проблему, укажите кодировку при просмотре данных или при сохранении их в базе данных.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]