私はこれに類似した質問にいくつかの答えを見つけましたが、私はまだ以下の問題を解決できません: utf8 codification 、私の手段を作成しましたphpはデータベースから取得した値を変更します(コード化と特殊文字の問題)
CREATE TABLE report (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
description TEXT,
image MEDIUMTEXT,
[...]
) DEFAULT CHARACTER SET utf8
私はアンドロイドアプリケーションからいくつかのエントリを正常にアップロードしました。特に、イメージは文字列でコード化されています(コーディング/デコード処理は機能しませんので、ここでは取り上げません)。しかし、私のアンドロイドアプリケーションが記述や画像を取得するために(PHPスクリプトを実行する)サーバーに接続すると、「description」に特殊文字(「è」など)に問題があり、アンドロイドアプリケーションに返された画像をコード化する文字列すべての特殊文字( '/'など)の前にエスケープ文字( '\')が入っているため、返されたStringは送信されたStringとは異なり、破損したStringからイメージを取得することはできません。
私は(「ID」フィールドは、目的をデバッグするために固定されており、ここで)実行するつもりだクエリは以下の通りである、とのphpMyAdminにそれが
SELECT description, image FROM report WHERE id=8
私は問題は、PHP内にあると仮定し正常に動作します以下れるスクリプト、(私は関連部分のみを貼り付けます)
<?php
header('Content-Type: application/json');
$action = $_POST['action'];
try {
$pdo = new PDO('mysql:host=activecitizen.altervista.org;dbname=my_activecitizen', 'activecitizen', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->exec('SET NAMES "utf8"');
}
catch (PDOException $e) {
[...]
}
switch($action){
[...]
break;
case "get_report_details":
$report_id = $_POST['report_id'];
$report_id_int = (int)$report_id;
try{
$sql = 'SELECT description, image FROM report WHERE id = '.$report_id_int;
$result = $pdo->query($sql);
$row = $result->fetch();
$output .= $row['description'];
$output .= "~";
$output .= $row['image'];
echo json_encode($output);
exit();
}
catch (PDOException $e){
[...]
}
break;
}
?>
は、私は$ PDO-> execの( 'SET NAMES "UTF8"')を考えました。コード化の問題を解決するには十分であったが、そうではないようだ。
この文字列のプレビューは、Androidアプリケーションに返されます。ここでは
"qui c'\u00e8 qualcuno che non ha voglia di rifarsi il letto!~iVBORw0KGgoAAAANSUhEUgAAAUwAAAC6CAIAAABKsOO4AAAAA3NCSVQICAjb4U\/gAA[...]"
あなたは「C '\ u00e8" が返されることがわかりますが代わりに 『C'è』と iVBORw0KGgoAAAANSUhEUgAAAUwAAAC6CAIAAABKsOO4AAAAA3NCSVQICAjb4U/GAAのinsted のiVBORw0KGgoAAAANSUhUUAAAUwAAAC6CAIAAABKsOO4AAAAA3NCSVQICAjb4U/gAA (文字列の最初の小さな部分)は、phpmyadminで実行されたクエリによって返されます。
長い間ご質問いただきまして申し訳ありません。お手伝いをしたいと考えている方は、事前におねがいします。
上のドキュメントはありがとう参照してください、あなたは答えるJSON abountもう少し知るために私をリードしています。本当の問題は、JSONを十分に知らなくても使用しようとしていたことです。 私はPHPコードecho json_encode()からエスケープ文字などを取り除いた後に生成されたStringで動作すると思った。 投稿したリンクから、私はjson文字列を最初にデコードしなければならないことを学んだ。そこでは、デコードされた文字列形式({name:value}の形式でなければならなかった)にいくつかの追加の問題がありましたが、今やすべての手順は完璧に機能します。ありがとうございました:) PS:タイトルに[SOLVED]タグを入れるべきですか? – alkasel
@alkasel - 答えのチェックマークをクリックします。 –