我知道我在问一个以前已经被问过很多次的问题,但我觉得我需要澄清我的问题。
我有一个Android应用程序,它发送一个JSON编码的字符串到PHP脚本。然后,下面的代码将数据保存为完整的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“。另外,"Wholesale & Retail“保存为"Wholesale u0026 Retail”。
由于JSON字符串中的非utf-8编码字符,我在php中的json_decode()也失败了。收到以下错误:格式错误的UTF-8字符,可能编码不正确。
我该如何处理所有这些场景?有什么需要帮忙的吗?
发布于 2012-10-09 21:14:47
您还必须在查询中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-08 22:48:53
你设置帖子的编码了吗?
List<NameValuePair> params = ...;
HttpPost httppost = new HttpPost(hostname);
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));发布于 2012-10-08 22:52:13
一般来说,现在所有的字符串都应该是UTF-8,因为它允许容易的国际化。您应该设置UTF,以便将字符串字段存储为MySQL -8 (utf8_general_ci)格式,这样就不会出现转换问题。
如果你坚持在你的数据库中使用另一种编码,你可能想要检查一下mb_check_encoding($string,'UTF-8')和mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8')。
https://stackoverflow.com/questions/12783635
复制相似问题