2012-02-11 17 views
0

PHPのJSONデータをAndroid handphoneから送信されたデータで読み込んでいます。ユーザーは名前を送信し、JSON/PHPはそれをMySqlデータベースに埋め込みます。私のユーザーの一部は韓国人です。アンドロイドはうまく韓国語の文字を処理しますが、データはJSON経由でやってきたときに、その後、そのようにPHPで読む:PHP/JSONの文字セットのデコード

$json = $_SERVER['HTTP_JSON']; 
$data = json_decode($json); 

$username = $data->username; 

、このような「김が」9C9G」として$ユーザ名に変異されるように完璧な韓国語音節"私のEclipseデバッガでは、名前がまだAndroid側で正しくフォーマットされているのがわかりますが、PHP側は正しくありません。私はMySQLの段階にまだ達していないし、それはすでにジャックされています。

他の文字を受け入れるには、PHP側で何をすべきですか?私は単に名前をテーブルに埋め込み、後で文字列で参照したいだけです。また、これらの文字をMySQL DBに埋め込むには、何をする必要がありますか?

それはそうのようなAndroidアプリから送信された

:あなたはおよそ私はAndroidがあなたのPHPアプリにデータを渡していることを推測することができ「Androidはうまく韓国語の文字を扱う」言ったことから、

public void postData() throws JSONException{ 
    // Create a new HttpClient and Post Header 
    HttpClient httpclient = new DefaultHttpClient(); 
HttpPost httppost = new HttpPost("http://martypants.us/triominoes/register.php"); 
JSONObject json = new JSONObject(); 

try { 
    JSONArray postjson = new JSONArray(); 
    postjson.put(json); 

    // Post the data: 
    httppost.setHeader("json", json.toString()); 
    httppost.getParams().setParameter("jsonpost", postjson); 

    // Execute HTTP Post Request 
    System.out.print(json); 
    HttpResponse response = httpclient.execute(httppost); 
<snip> 
} 
+0

'var_dump($ json)'はあなたに何を提供しますか?すなわち、最初にクライアントから送信されるデータはどのようなものですか? – deceze

+0

文字列が正しくエンコードされていないと 'json_decode()'が 'NULL'を返すので、データベースに問題がある可能性があります。あなたのMySQLテーブルとカラム(ユーザ名を格納する場所)が正しいエンコーディング(通常はutf8_general_ci)を持っていますか? – entropid

+0

var_dumpは "@ l"のようなスクランブル文字を与えてくれるだけです。 I – Martin

答えて

0

あなたはそれを正しくデコードしていません。

//this is reaaaaally not safe, but... missing the point 
$json = $_SERVER['HTTP_JSON']; 

//check if it's utf8 
if (is_string($value)){ 
    $json = mb_check_encoding($json, 'UTF-8') ? utf8_encode($json) : $json; 
} 

$jsonData = json_decode($json); 

それはただの考えですが、PHPを使用した場合、エンコーディングは複数回、私の人生は悲惨なてきた:私の推測では、あなたがこのような何かを試みることです。

希望すると助かります!

+1

"エンコーディングは私の人生を2回以上惨めなものにしました" - 無礼であるという意味ではありませんが、エンコーディングやPHPの処理方法を理解していない可能性があります。 'utf8_encode'の使用は指標の何かです。それを使用すると、韓国語をエンコードできないLatin1 *から*を変換するので、韓国語の文字を表示することはできません。 [すべてのプログラマーが絶対に、エンコーディングと文字セットについて知りたいと思っているのはどうすればよいですか?](http://kunststube.net/encoding/)をお勧めします。 – deceze

+0

「失礼ではない」という言葉は必要ありませんが、私はいつも他の開発者からの解明を良いものとして、ずいぶん前から私の誇りを傷つけていましたが、唯一の平凡な人しか批評家を扱うことができず、結局のところ、私はネットの人です:)。 –

+0

驚くばかりの記事btw ... –

関連する問題