3

これまで何度も聞かれた質問をしていることは承知していますが、問題点を明確にする必要があると感じています。

JSONでエンコードされた文字列をPHPスクリプトに送信するAndroidアプリがあります。次のコードは、データを完全なJSON文字列として保存します。(1つの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文字列に含まれるテキストの一部がutf-8でエンコードされたAndroidのstrings.xmlから取得されることです。たとえば、strings.xmlファイル<item>Can\'t get there</item>は、MySQLで「Canu0027tgetthere」として保存されます。また、「Wholesale&Retail」は「Wholesaleu0026Retail」として保存されます。

また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である必要があります。utf8_general_ci文字列フィールドがUTF-8( )として格納され、変換で問題が発生しないようにMySQLデータベースを設定する必要があります。

あなたがあなたのデータベースで別のエンコーディングを主張するなら、あなたはチェックアウトしてそしてを望むかもしれませmb_check_encoding($string,'UTF-8')mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8')

于 2012-10-08T14:52:13.347 に答える