我正在使用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;
使用像
这样的代码的androidHttpClient 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?
但是,我目前不知道如何摆脱错误!任何建议!
答案 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
会在某些极端情况下执行不正确。