2012-02-28 11 views
2

DBの検索結果に問題が見つかりました。一部のフィールドに "ü"のような余分な文字がある場合、フィールドはnullとして返され、検索時にはnullとして表示されます。 PHPスクリプトMySQL PHP JSONヌルテキスト

$q=mysql_query("SELECT * FROM PRODFAR WHERE ARTI LIKE '%".$_REQUEST['search']."%'"); 
    while($e=mysql_fetch_assoc($q)) 
      $output[]=$e; 

    print(json_encode($output)); 

    mysql_close(); 

JSONパーサーコンストラクタ :

public class JsonParser { 
    static InputStream is = null; 
    static JSONObject json_data = null; 
    static String result = ""; 

    // constructor 
    public JsonParser() { 
    } 

    public JSONArray getJSONFromUrl(ArrayList<NameValuePair> nameValuePairs, String url) { 

     //http post this will keep the same way as it was (it's important to do not forget to add Internet access to androidmanifest.xml 
     InputStream is = null; 
     String result =""; 
     JSONArray jArray = null; 
     try{ 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpPost httppost = new HttpPost(url); 
      httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
      HttpResponse response = httpclient.execute(httppost); 
      HttpEntity entity = response.getEntity(); 
      is = entity.getContent(); 

     } 
     catch(Exception e){ 
      Log.e("log_tag", "Error in http connection "+e.toString()); 
     } 

     //convert response that we receive from the php file into a String() 
     try{ 


      BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      result = sb.toString(); 
     }catch(Exception e){ 
      Log.e("log_tag", "Error converting result "+e.toString()); 
     } 

     // try parse the string to a Json object 
     try { 
      //json_data = new JSONObject(result); 
      jArray = new JSONArray(result); 


     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return Json String 
     return jArray; 

    }  
} 

私はこの問題を解決する方法のいずれかのヒント私のコードは次のようなものですか?

update:UTF-8文字しか許可されていないため、JSONで渡すことはできません。可能な解決策の1つは、PHPを使ってテキストをUTF-8エンコーディングアーカイブに変換すること、もう1つはJSONの代わりに他のエンコーディングをサポートすることです。私は最初のものを試してみたいと思います。 PHPを使ってUTF-8へのテキストのエンコーディングを隠す良いアルゴリズムを知っていれば助けになります。また、解決策を見つけるために他のヒントや可能な方向のヒントは歓迎されているこのポスト上の任意のアイデアをコメントしてください

が、私はそれがUTF-8にそれをコードする解決 を解決して歓迎され、それがに「ü」のように私の文字を変更u \ 000fのようなものですが、javaエディタは画面に表示されるときにÜのようなiso-8859-1と表示します。編集したPHPコードのクエリの後に次の行を持っています。一見

$q=mysql_query("SELECT * FROM PRODFAR WHERE ARTI LIKE '%$search1%'"); 
     while($e=mysql_fetch_assoc($q)){ 
       $e['ARTI'] = utf8_encode ($e['ARTI']); 
       $e['DESC'] = utf8_encode ($e['DESC']); 
       $e['PRESENT'] = utf8_encode ($e['PRESENT']); 
       $output[]=$e; 
     } 
     print(json_encode($output)); 

答えて

1

JSONはUTF8のみをサポートします。ですから、変換のためにutf8_encode()/ utf8_decode()を使ってみてください。

+1

UTF-8非大文字と小文字を区別してデータをエンコードするオプションがMySQLにあるかどうか知っていますか?それもJSONと互換性がありますか? –

+0

私は私の弦を小さくして、UTF-8のために盲目的にすべてをエスケープしないようにしたいと思います。 UTF8以外の文字をUTF8の同等物/最も近いものに置き換える方法はありますか?また、utf8_enodeはMySQLのWHERE文にどのように影響しますか?私は条件をエンコードする必要がありますか? – Angad

0

、私はエンコードの問題としてそれを推測すると思います。あなたのテーブルがUTF-8であることと、ビューが同じであることを確認してください。

また、$_REQUESTのデータをSQLに直接入力しないでください。それがあなたを襲うために戻ってくるでしょう。

+0

私はすでにMySQLでutf-8ビンにエンコーディングを変更しましたが、クエリの区別と "A"の "a"のために結果が少ないのでutf-8エンコーディングが問題になります大文字と小文字が区別されないMySQLで? –

+0

@PedroTeran、bin部分なしでutf-8のみを使用してください – Abhay

+0

ありがとう、phpmyadminは大文字と小文字の区別がつかないUTF-8だけを選択できない限りUTG-8_unicodeを使用しましたが、 android私はまだ特別な文字でヌルになっています –