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
相关产品推荐
相关产品推荐

