2016-07-24 4 views
0

私のC++デスクトップアプリケーションは、私のサーバーに(私のHTTPリクエストヘッダで指定された)charset=UTF-8形式のデータを投稿しています。投稿されたデータを分析している私のPHPスクリプトでは、_POSTが正しく読み取れません。Handle utf-8形式のデータが投稿されました

投稿したデータを手動でデコードする必要がありますか?私はHTTPの投稿要求がスクリプト/ PHPが自動的にそれを把握する文字セットを指定したと思った?

foreach($_POST as $key => $value) 
{ 
    $contents .= $key . ", " . $value . "\r\n"; 
} 

// contents = n, J o h n D o e 
// when it should = name, John Doe\r\nuserid, hithere\r\n 

答えて

0

HTTP POSTリクエストは、スクリプト/ PHPは自動的にそれを把握します文字セットを指定した場合、私は思いましたか?

いいえ、文字エンコーディングは下位レイヤです。まず、送信するデータのContent-TypeについてPHPに知らせる必要があります。

manual on $_POSTをチェックし、それは言う:

要求にHTTPのContent-Typeとしてapplication/x-www-form-urlencodedmultipart/form-dataを使用している場合、HTTP POSTメソッドで現在のスクリプトに渡された変数の連想配列。

HTTPファイルのアップロードでは、他の「通常の」フォームデータ(テキストフィールド、基本的には文字列データを送信するもの)は最初のものを使用します。

もちろん、あなたのスクリプトは、選択したContent-Typeに従ってエンコードされたデータを送信する必要があります。どのようなHTTPライブラリを使用していても、それを処理するメソッドを提供する必要があります。私はあなたが確信が持てない場合は、文書の中の一見をお勧めしたいと思います。


HTMLフォームをエミュレートする限り、これを行う方法になります。それがあなたの目標でない場合、あなたの選択肢は、f.eのように、あなたが選んだ任意のフォーマットでエンコードされたデータを送ることです。 JSON(または、特別な方法で処理さえしない場合もあります)を入力し、file_get_contentsphp://inputストリームラッパーを使用して生の入力を読み取ります。

+0

私のC++アプリケーションでは、ヘッダーのContent-Typeも 'Content-Type:application/x-www-form-urlencoded'と指定しています。フォームデータは単純に 'name = John + Doe&userid = hithere'です。私は 'utf8_decode($ key)'を試しましたが、同じ結果が運がありません。 utf-8形式のデコード/処理の正しい方向を教えてください。 –

+0

サーバログとは何ですか?あなたはPOSTリクエストをしていますか? – CBroe

関連する問題