0

utf-8をandroidからphpに送信する際に問題が発生しました。私は多くの解決策をオンラインで調べましたが、それらすべてがどういうわけかUTF-8の送信に失敗します。

私のJavaコード

 String str = "";
    HttpClient httpclient = new DefaultHttpClient();

    HttpPost httppost = new HttpPost(params[0]);
    try {
        // set up post data
        JSONObject json = getJSON();

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

        // Post the data:
        httppost.setHeader("json",json.toString());
        httppost.setEntity(new ByteArrayEntity(json.toString().getBytes("UTF8")));

        httppost.getParams().setParameter("jsonpost",postjson);
        httppost.getParams().setParameter("jsonpost",postjson);
        HttpResponse response = httpclient.execute(httppost);
        if(response != null)
        {
            str = getInputString(response);
            return str;
        }
    }
    catch (UnsupportedEncodingException e) {
        return "";
    }
    catch (Exception e) {
        return "";
    }
    return "";

一方、私のphp

<?php
header'Content-Type:text/plain; charset=utf-8');

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

echo $message;
?>

私が受け取る出力は、「欢迎」のような漢字の場合は空白の文字列ですが、「ようこそ」のような場合は空白の文字列です。メッセージには「ようこそ」という出力があります。ここでの主な問題は何ですか?誰かが助けてくれたらありがたいです。ありがとう。

解決:

$data = json_decode(file_get_contents('php://input'));
$message = $data->message;

echo $message;
?>
4

3 に答える 3

0

なぜあなたはBiteArray?あなたは単にそのようにすることができます:

httpPost.setEntity(new UrlEncodedFormEntity(values, HTTP.UTF_8)

ここで、values(List<NameValuePair>)はparamになります。

于 2012-09-01T12:04:24.240 に答える
0

iniにutf-8を設定し、phpスクリプトでもこの関数を使用します。

ini_set('default_charset', 'utf-8');

このコードを置く:

<?php
 ini_set('default_charset', 'utf-8');
$json = $_SERVER['HTTP_JSON'];
$data = json_decode($json);
$message = $data->message;

echo $message;
?>
于 2012-09-01T13:08:04.547 に答える
0

この質問の日付が2012年であっても、問題は解決されておらず、同じ種類の質問は未解決のままであるようです。

タブレットとPHPWebサーバー間で大量のデータ転送を使用し、フランス語とポルトガル語を使用してAPPに取り組んでいるため、「stangechar」を使用していくつかのテストを行いました。

  • Androidタブレットを使用してPHPWebサイトにデータを送信する場合は、次の方法を使用してデータを準備する必要があります。

    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
    nameValuePairs.add(new BasicNameValuePair("op","_CID1"));
    nameValuePairs.add(new BasicNameValuePair("la",la));
    nameValuePairs.add(new BasicNameValuePair("lo",lo));
    nameValuePairs.add(new BasicNameValuePair("id",codigo));
    
    // Encoding URL for GET
    String the_param = URLEncodedUtils.format(nameValuePairs,"utf-8");
    String url = the_url + "?" + the_param;
    

PHP側では、isset(この場合はisset($ _ GET ['op']);などを使用して値の存在をテストする必要があります。次に、SQLを使用してデータの検証を実行する必要があります。 SQLインジェクションを防ぎ、de値をデコードします。そのためには、次を使用します。

$result = @mysqli_real_escape_string ($handle,$var);

ここで、hanldeはDBを開いた後に取得するハンドルであり、$varはAndroidから取得する値です。(例はSQLiを使用しています)

  • PHPからデータを取得する場合、つまり、PHPWebサイトの「エコー」データとタブレットがデータを取得します。2つのオプション:

簡単な方法は、PHP側でutf8_decodeを実行することです(私はエンコードではなくDECODEを記述します!!)したがって、実行する場合は、PHP側で次のようにします。

$str = "Não, l'été c'est pour bientôt";
echo $str;

Androidでは間違った文字列が表示されます。完璧な値を取得するには、次のことを行う必要があります。

    $str = "Não, l'été c'est pour bientôt";
    $str = utf8_decode($str);
    echo $str;

Androidで文字列を取得するには、次のようにします。

            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(url[0]);
            HttpResponse resp = httpclient.execute(httppost);
            HttpEntity ent = resp.getEntity();
            text = EntityUtils.toString(ent);

説明:基本的に、PHP側では、文字列はUTF8です。utf8-decodeを実行するときは、文字列をISO-8859-1に設定します。これは、Androidのデフォルト値です(EntityUtilsのドキュメントを参照)。

PHP側でutf8_decodeを実行しない場合は、Androidのdefautでは認識されないutf8を使用してデータを送信します。その場合、パラメーターutf8を使用してEntityUtilsを実行する必要があります。

実際、またはPHP側でUTF8をISO-8859-1に変換してから、ISO-8859-1(オプション1)を送信して使用するか、UTF8などを送信する場合は、EntityUtils(オプション2)を使用してAndroid側で変換する必要があります。

これがピーターに役立つことを願っています

于 2014-09-03T12:53:25.703 に答える