【问题标题】:Android get http response from PHP containing unicode characterAndroid从包含Unicode字符的PHP获取http响应
【发布时间】:2012-02-20 13:39:32
【问题描述】:

我正在使用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语句时发现了一个异常,比如这个Error parsing data org.json.JSONException: End of input at character 0 of, Chinese Character。我想可能是由 unicode 引起的,类似于这篇文章 How to Convert Char set in android?

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

【问题讨论】:

  • 中文字符在网络浏览器中看起来正确吗?如果您可以运行 fiddler,您可以以 RAW 格式对响应进行快照吗?我特别想看看响应标头中是否有任何字符编码器标签。
  • 是的,汉字在firefox中看起来是正确的,我已经测试了这一点。之前没用过fiddler,试了一下,结果告诉大家!

标签: php android json unicode


【解决方案1】:
$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 在某些极端情况下会执行不正确。

【讨论】:

  • 感谢您的回复,我的php中没有使用json,实际上我只是使用了string,我认为原因应该是unicode引起的!另外,感谢您提醒我在 php sn-ps 中的安全问题!
猜你喜欢
  • 2023-04-10
  • 1970-01-01
  • 1970-01-01
  • 2017-12-11
  • 2012-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多