3

我知道我在问一个以前被问过很多次的问题,但我觉得我需要澄清我的问题。

我有一个将 JSON 编码字符串发送到 PHP 脚本的 Android 应用程序。然后,以下代码将数据保存为完整的 JSON 字符串。(还有其他功能可以将数据正确保存到多个字段,而不仅仅是一个 JSON 字符串)

$json_complete = $_POST['questionnaire'];
$q = json_decode($json_complete, true);

//save complete json string to database
$query_upload = "INSERT INTO questions_json (q_id, json) VALUES('".mysql_real_escape_string($q[qID])."', '$json_complete') ON DUPLICATE KEY UPDATE json = VALUES(json)";
$result = mysql_query($query_upload) or errorReport("Error in query: $query_upload. ".mysql_error());
if (!$result)
    errorReport($result);

问题是 JSON 字符串中包含的一些文本取自 Android 中以 utf-8 编码的 strings.xml。作为示例,strings.xml 文件<item>Can\'t get there</item>在 MySQL 中保存为“Canu0027t get there”。还将“批发和零售”另存为“批发 u0026 零售”。

json_decode()由于 JSON 字符串中的非 utf-8 编码字符,我在 php 中也失败了。收到以下错误:格式错误的 UTF-8 字符,可能编码不正确。

我该如何处理所有这些情况?请提供任何帮助。

4

3 回答 3

2

您还必须在mysql_real_escape_string()$json_complete的查询中使用,否则您会丢失原始/uXXXX编码。

$json_complete = $_POST['questionnaire'];
$q = json_decode($json_complete, true);

//save complete json string to database
$query_upload = "INSERT INTO questions_json (q_id, json) VALUES('".mysql_real_escape_string($q[qID])."', '".mysql_real_escape_string($json_complete)."') ON DUPLICATE KEY UPDATE json = VALUES(json)";
$result = mysql_query($query_upload) or errorReport("Error in query: $query_upload. ".mysql_error());
if (!$result)
    errorReport($result);
于 2012-10-09T13:14:47.473 回答
1

您是否设置了帖子的编码?

    List<NameValuePair> params = ...;
    HttpPost httppost = new HttpPost(hostname);
    httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
于 2012-10-08T14:48:53.163 回答
0

一般来说,现在所有的字符串都应该是 UTF-8,因为它可以轻松实现国际化。您应该设置您的 MySQL 数据库,以便将字符串字段存储为 UTF-8 ( utf8_general_ci),并且您不会遇到转换问题。

如果您坚持在您的数据库中使用另一种编码,您可能需要检查mb_check_encoding($string,'UTF-8')mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8').

于 2012-10-08T14:52:13.347 回答