В моем скрипте я отправляю данные с помощью cURL и включил CURLOPT_RETURNTRANSFER. Ответ представляет собой данные в формате json. Когда я пытаюсь использовать json_decode, он возвращает null. Затем я обнаружил, что ответ содержит символы спецификации utf-8 в начале строки ().
Есть эксперименты:
$data = $data = curl_exec($ch);
echo $data;
результат {"поле_1":"текст_1","поле_2":"текст_2","поле_3":"текст_3"}
$data = $data = curl_exec($ch);
echo mb_detect_encoding($data);
результат - UTF-8
$data = $data = curl_exec($ch);
echo mb_convert_encoding($data, 'UTF-8', mb_detect_encoding($data));
// identical to echo mb_convert_encoding($data, 'UTF-8', 'UTF-8');
результат - {"поле_1":"текст_1","поле_2":"текст_2","поле_3":"текст_3"}
Единственное, что помогает, это удалить первые 3 символа:
if (substr($data, 0, 3) == pack('CCC', 239, 187, 191)) {
$data = substr($data, 3);
}
Но что, если будет другая спецификация? Итак, вопрос: как определить правильную кодировку ответа cURL? ИЛИ как определить, какая спецификация прибыла? Или, может быть, как преобразовать ответ с BOM?