Android 从包含 unicode 字符的 PHP 获取 http 响应


Android get http response from PHP containing unicode character

我正在使用Android编写一个应用程序,假设从服务器中检索一些中文字符,服务器使用php脚本,如下所示

 mysql_query("SET CHARACTER SET utf8", $link);
 $q= mysql_query("SELECT Name FROM ofPeers WHERE Address LIKE '$st' limit 0, 4");
 while($e = mysql_fetch_array($q))
    $output1=$output1.$e["Name"];
 print $output1;

安卓使用一些代码,如

HttpClient client = getHttpClient();
HttpPost request = new HttpPost(url);
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters,"UTF-8");        
request.setEntity(formEntity);
HttpResponse response = client.execute(request);

我发现我在执行执行语句时捕获了一个异常,例如解析数据 org.json.JSONException 时出错:字符 0 处的输入结束,中文字符。我想可能是由 unicode 引起的,类似于这篇文章如何在安卓中转换字符集?

但是,我目前不知道如何摆脱错误!任何建议!

$output1=$output1.$e["Address"];

似乎只是将所有结果连接成一个字符串。这不会给你 JSON 输出,所以当你似乎将响应解析为 JSON 时,你可能会遇到语法错误。

您可能希望将所有地址放入数组中,然后使用json_encode将其转换为 Android 可以读取的 JSON 响应。

此外,您还存在 SQL 注入漏洞。在将mysql_real_escape_string包含在查询中之前,请使用$st,或者更好的是使用参数化查询(在 mysqli 和 PDO 中可用(。优先使用mysql_set_charset而不是显式SET CHARACTER SET,否则mysql_real_escape_string在某些极端情况下会执行不正确。