【问题标题】:Android JSON with PHP, characters with accent not being handled properly带有 PHP 的 Android JSON,重音字符未正确处理
【发布时间】:2012-11-01 03:24:51
【问题描述】:

简而言之,在将字符串从我的 android 应用程序发送到 php 并使用 JSON 对其进行解码时,法语字符会造成问题。 这是我在我的 android 应用程序 (Java) 中所做的事情

    HttpPost httppost = new HttpPost(//my server and filename);

    try {
       List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);

       nameValuePairs.add(new BasicNameValuePair("payload", jsonObj.toString()));
       httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));

       // Execute HTTP Post Request
       HttpResponse response = httpclient.execute(httppost);
     }....

这是我的 php 代码

$_POST['payload'] = stripslashes($_POST['payload']); 
$payload = $_POST['payload'];
error_log(" $payload ", 0);
$payloadObj = json_decode($payload);
error_log(" $payloadObj ", 0);

当使用英文字母时,一切都很完美,但是当我用法语字母重音时,它就不起作用了。我插入了上面的错误日志以查看我得到了什么,我注意到对于法语字母,有效负载将法语字母显示为 并且payloadObj是空的,所以我猜解码失败了。

请帮帮我,问题到底出在哪里(在什么阶段)?我该如何解决?

【问题讨论】:

  • 你为什么使用stripslashes()
  • 因为我将这个信息用于 mysql 并且它是在 magicQuotes 开启的情况下。它对英文字母没有任何伤害
  • stripslashes() 为 MySQL 做 nothing,与它完全没有关系。您应该禁用魔术引号。如果不能,请查看此答案:stackoverflow.com/a/517027/362536

标签: java php android json


【解决方案1】:

您是否尝试使用 iconv() 修复它?

//$payload = $_POST['payload'];
$payload = (isset($_POST['payload'])) ? iconv("UTF-8","UTF-8//IGNORE",$_POST['payload']) ? '';
error_log(" $payload ", 0);
$payloadObj = json_decode($payload);
error_log(" $payloadObj ", 0);

【讨论】:

  • 我会接受这个答案,因为它给了我关于正确解决方案的提示。正确的解决方案是做 httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs), "UTF-8");并修复了它
猜你喜欢
  • 2015-06-02
  • 1970-01-01
  • 2019-11-05
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多