php - php curl日本語出力が文字化けする

原文 php curl character-encoding

次のURLを検討してください。
click here

日本語文字へのエンコードがあります。私のPCのFirefoxブラウザーはそれを自動的に検出し、キャラクターを表示することができます。一方、Chromeの場合、日本語の文字を表示するには、エンコードを手動で「Shift_JIS」に変更する必要があります。

PHP-cURLを介してコンテンツにアクセスしようとすると、エンコードされたテキストは次のように文字化けします


   ���ϕi�̂��ƂȂ��I�݂��Ȃ̃N�`�R�〜�T�C�g���������������i�A�b�g� R�X���j�ɂ��܂����I


私は試した:

  curl_setopt($ch, CURLOPT_ENCODING, 'Shift_JIS');


私も試しました(curlの応答をダウンロードした後):

  $output_str = mb_convert_encoding($curl_response, 'Shift_JIS', 'auto');
  $output_str = mb_convert_encoding($curl_response, 'SJIS', 'auto');


しかし、それでもうまくいきません。

完全なコードはこちら

   curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language: en-US,en;q=0.5',
        'Connection: keep-alive'
    ));

    //curl_setopt($ch, CURLOPT_ENCODING, 'SJIS');
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 20);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $response = curl_exec($ch);
答え
そのページは有効なHTMLを返さず、実際にはJavascriptです。 curlで取得して出力する場合は、コードにheader('Content-type: text/html; charset=shift_jis');を追加します。Chromeに読み込むと、文字が正しく表示されます。

HTMLは文字セットを指定しないため、header()を使用してサーバーから文字セットを指定できます。

端末で適切に表示されるようにエンコードを実際に変換するには、次を試してください。

iconv()を使用してUTF-8に変換します

$curl_response = iconv('shift-jis', 'utf-8', $curl_response);


mb_convert_encoding()を使用してUTF-8に変換します

$curl_response = mb_convert_encoding($curl_response, 'utf-8', 'shift-jis');


これらの方法は両方ともうまくいき、日本語の文字が端末に正しく表示されるのを見ることができました。

UTF-8は問題ないはずですが、システムが別のものを使用していることがわかっている場合は、代わりにそれを試すことができます。

お役に立てば幸いです。
関連記事

php - PHPUnitを使用してクラスファイル以外のphpファイルを単体テストすることは可能ですか?

php - LaravelでJSONオブジェクトをデコードする方法

javascript - summernote jsアップロード画像

php - サーバーからサーバーへGoogleドライブへアクセスして自分のファイルを表示するPHPスクリプト

php - 「auth」ミドルウェアの使用中にホームページにリダイレクトするLaravel Elfinder

php - 世界のすべての国のリスト/データベース?

php - Laravel 5でネストされたJSONオブジェクトリクエストを処理する方法は?

php - ダッシュ付きのLaravelカスタムコマンド引数

javascript - JavaScriptでMySQLデータベースからデータを取得してチャートを作成する方法は? [閉まっている]

javascript - JQueryとPHPを使用してPOSTでattr値とform値を送信する方法は?