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

时间:2012-01-27 15:10:16

标签: php android json unicode

我正在使用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;

使用像

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

我发现我在执行execute语句时遇到异常,就像解析数据时出错了org.json.JSONException:中文字符0的输入结束。我想也许它是由unicode引起的,类似于这篇文章 How to Convert Char set in android?

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

1 个答案:

答案 0 :(得分:0)

$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会在某些极端情况下执行不正确。