2017-08-23 8 views
0

私はこれに類似した質問にいくつかの答えを見つけましたが、私はまだ以下の問題を解決できません: 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で実行されたクエリによって返されます。

長い間ご質問いただきまして申し訳ありません。お手伝いをしたいと考えている方は、事前におねがいします。

答えて

1

json_encode()は、マルチバイトユニコード文字を\uXXXXとしてエンコードします。あなたはこのようなJSON_UNESCAPED_UNICODEオプションを使用できることをしたくない場合は、次の

echo json_encode($output, JSON_UNESCAPED_UNICODE); 

json_encode()JSON constants

+0

上のドキュメントはありがとう参照してください、あなたは答えるJSON abountもう少し知るために私をリードしています。本当の問題は、JSONを十分に知らなくても使用しようとしていたことです。 私はPHPコードecho json_encode()からエスケープ文字などを取り除いた後に生成されたStringで動作すると思った。 投稿したリンクから、私はjson文字列を最初にデコードしなければならないことを学んだ。そこでは、デコードされた文字列形式({name:value}の形式でなければならなかった)にいくつかの追加の問題がありましたが、今やすべての手順は完璧に機能します。ありがとうございました:) PS:タイトルに[SOLVED]タグを入れるべきですか? – alkasel

+0

@alkasel - 答えのチェックマークをクリックします。 –

関連する問題