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