使用json从android发送utf8字符串到php

时间:2018-01-27 09:35:40

标签: php android json

我使用以下方法将数据从Android应用程序发送到php脚本:

    JSONObject jsonObject= new JSONObject();
    try {
        jsonObject.put("name", "name ąęś");
        jsonObject.put("address", "address żżóóó");
        jsonObject.put("title", "title ćććżżżóóó");

    } catch (JSONException e) {
        e.printStackTrace();
    }zamiast



    JSONParser jsonParser = new JSONParser();
    String url = "http://www.serwer.com/script.php";

    // Building Parameters
    List<NameValuePair> params = new ArrayList<NameValuePair>();
    params.add(new BasicNameValuePair("post", jsonObject.toString()));
    // getting JSON Object
    // Note that create product url accepts POST method
    JSONObject json = jsonParser.makeHttpRequest(url, "POST", params);

在php脚本站点中,我收到如下数据:

if(isset($_POST['post']))
{
    $post_utf8 = htmlentities($_POST['post'],ENT_QUOTES, "UTF-8");
    $postX = htmlspecialchars_decode($post_utf8);

    $post_x = json_decode($postX, true);

    echo $_POST['post']; //--> problem with utf8 , "?" instead polish characters
    echo $post_x['name']; //--> problem with utf8 , "?" instead polish characters
    echo "ąęź"; // --> everything OK, I can see polish characters
}

我总能看到“?”而不是波兰人物。 使用echo“ąźć”我可以看到波兰人物。 对此的改进是POST方法有问题。 我已经检查了很多东西,但不幸的是我到目前为止还没有找到解决方案。

2 个答案:

答案 0 :(得分:0)

当使用UTF-8向PHP Server应用程序执行AJAX请求时,您必须确保1)前端支持UTF8(提交表单时,例如HTML编码必须设置为UTF8),2)Webserver配置为使用UTF-8(Apache:AddDefaultCharset utf-8),3)PHP配置为使用UTF8。

答案 1 :(得分:0)

Java Strings使用Unicode,JSON Strings是UTF-8编码的。这就是为什么我们首先需要将Unicode String更改为UTF8字符串,如下所示:

JSONObject jsonObject= new JSONObject();
try {
    jsonObject.put("name", "name ąęś");
    jsonObject.put("address", "address żżóóó");
    jsonObject.put("title", "title ćććżżżóóó");

} catch (JSONException e) {
    e.printStackTrace();
}zamiast



JSONParser jsonParser = new JSONParser();
String url = "http://www.serwer.com/script.php";


String utf8String = "";
try {
    utf8String = new String(jsonObject.toString().getBytes("UTF-8"), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}





// Building Parameters
List<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("post", utf8String));
// getting JSON Object
// Note that create product url accepts POST method
JSONObject json = jsonParser.makeHttpRequest(url, "POST", params);