スクリプトでは、cURLを使用してデータを送信し、CURLOPT_RETURNTRANSFERを有効にしました。応答はjsonでエンコードされたデータです。json_decodeを実行しようとすると、nullが返されます。次に、応答の文字列の先頭にutf-8 BOM記号が含まれていることがわかりました()。
いくつかの実験があります:
$data = $data = curl_exec($ch);
echo $data;
結果は{"field_1": "text_1"、 "field_2": "text_2"、 "field_3":"text_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');
結果-{"field_1": "text_1"、 "field_2": "text_2"、 "field_3": "text_3"}
役立つ1つのことは、最初の3つのシンボルを削除することです。
if (substr($data, 0, 3) == pack('CCC', 239, 187, 191)) {
$data = substr($data, 3);
}
しかし、別のBOMがある場合はどうなるでしょうか。したがって、問題は次のとおりです。cURL応答の正しいエンコーディングを検出する方法は?または、どのBOMが到着したかを検出する方法は?または、BOMを使用して応答を変換する方法はありますか?