Android与php:将utf-8字符串保存到MySQL
我知道我在问一个以前被问过很多次的问题,但我觉得我需要澄清我的问题 我有一个Android应用程序,它向PHP脚本发送一个JSON编码的字符串。然后,以下代码将数据保存为完整的JSON字符串。(还有其他函数可以将数据正确地保存到多个字段,而不仅仅是一个JSON字符串) 问题是JSON字符串中包含的一些文本取自Android中的strings.xml,该字符串以utf-8编码。例如,strings.xml文件Android与php:将utf-8字符串保存到MySQL,php,android,utf-8,json,Php,Android,Utf 8,Json,我知道我在问一个以前被问过很多次的问题,但我觉得我需要澄清我的问题 我有一个Android应用程序,它向PHP脚本发送一个JSON编码的字符串。然后,以下代码将数据保存为完整的JSON字符串。(还有其他函数可以将数据正确地保存到多个字段,而不仅仅是一个JSON字符串) 问题是JSON字符串中包含的一些文本取自Android中的strings.xml,该字符串以utf-8编码。例如,strings.xml文件不能到达那里在MySQL中保存为“Canu0027t到达那里”。此外,“批发和零售”另存为
不能到达那里
在MySQL中保存为“Canu0027t到达那里”。此外,“批发和零售”另存为“批发u0026零售”
由于json字符串中的非utf-8编码字符,我在php中的json\u decode()
也失败了。出现以下错误:格式错误的UTF-8字符,可能编码不正确
我如何处理所有这些情况?请提供帮助。您是否设置了帖子的编码
List<NameValuePair> params = ...;
HttpPost httppost = new HttpPost(hostname);
httppost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
列表参数=。。。;
HttpPost HttpPost=新的HttpPost(主机名);
setEntity(新的UrlEncodedFormEntity(参数,“UTF-8”);
一般来说,现在所有的字符串都应该是UTF-8,因为它允许轻松的国际化。您应该设置MySQL数据库,使字符串字段存储为UTF-8(utf8\u general\u ci
),并且不会出现转换问题
如果您坚持在数据库中使用另一种编码,您可能需要检查
mb\u check\u编码($string,'UTF-8')
和mb\u convert\u编码($string,'ISO-8859-1,'UTF-8')
您还必须在查询中检查mysql\u real\u escape\u string()
您的$json\u complete
,否则您将丢失原始的/uxxx
编码
$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);
为什么json_decode()在php中失败???您是否得到了错误的字符串或出现了错误消息?即使您保存了Canu0027t get there,您也会使用var a=“Canu0027t get there”来显示此消息;及警觉(一);;你会看到:你到不了那里吗?我试过了,但没什么不同。仍然得到“it's”另存为“itu0027s”将我的MySQL更改为utf8\u general\u ci,但没有任何区别。还尝试了mb_check_编码和mb_convert_编码,但也没有区别。仍然可以将“it's”保存为“itu0027s”,这很奇怪。因此,解码后的json包含额外的字符,因为php无法正确解码utf-8 json,所以有哪些字符?或者,您可能需要更改从xml读取这些字符串并将其嵌入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])."', '".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);