You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android通过JSON向PHP发送UTF-8字符串乱码问题求助

解决Android POST含UTF-8特殊字符到PHP的乱码问题

你的问题核心是请求未明确声明UTF-8编码,再加上PHP端多余的字符转义操作,导致波兰语特殊字符被错误解析成问号。下面是具体的排查和修复步骤:

一、修复Android端的请求编码

你的Java代码里,JSONParser.makeHttpRequest方法大概率没有在请求头中明确指定UTF-8编码。PHP默认会根据请求的Content-Type头解析POST数据,如果没指定charset=UTF-8,它会用服务器默认字符集(通常是ISO-8859-1)解码,直接破坏UTF-8格式的波兰语字符。

打开你的JSONParser类,找到处理POST请求的部分,添加以下请求头:

// 假设你用的是HttpURLConnection
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("POST");
// 添加这两行,明确告诉服务器我们发送的是UTF-8编码的数据
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
connection.setRequestProperty("Accept-Charset", "UTF-8");

这一步确保Android发送的POST数据以UTF-8编码传输,服务器能正确识别。

二、简化PHP端的接收逻辑

你之前用htmlentities再htmlspecialchars_decode的操作完全多余,反而可能破坏原始UTF-8字符串。直接对原始$_POST['post']进行JSON解码即可,同时要确保PHP输出时也用UTF-8编码。

修改后的PHP代码:

// 首先告诉浏览器我们输出的是UTF-8编码内容
header('Content-Type: text/html; charset=utf-8');

if(isset($_POST['post'])) {
    // 直接使用原始POST数据,无需额外转义
    $rawPost = $_POST['post'];
    $postData = json_decode($rawPost, true);
    
    echo $rawPost; // 现在应该正常显示波兰语字符
    echo "<br>";
    echo $postData['name']; // 提取的字段也能正常显示
    echo "<br>";
    echo "ąęź"; // 对比验证
}

三、额外服务器配置检查(可选)

如果上述步骤仍未解决问题,检查服务器PHP配置:

  • 打开php.ini,确保default_charset = "UTF-8"
  • 检查Apache/Nginx配置,确保站点默认字符集为UTF-8(比如Apache的AddDefaultCharset UTF-8)

这些配置能确保服务器全局以UTF-8处理请求和响应,避免编码不一致问题。

内容的提问来源于stack exchange,提问作者Kamito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:34:59