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));
UTF-8非大文字と小文字を区別してデータをエンコードするオプションがMySQLにあるかどうか知っていますか?それもJSONと互換性がありますか? –
私は私の弦を小さくして、UTF-8のために盲目的にすべてをエスケープしないようにしたいと思います。 UTF8以外の文字をUTF8の同等物/最も近いものに置き換える方法はありますか?また、utf8_enodeはMySQLのWHERE文にどのように影響しますか?私は条件をエンコードする必要がありますか? – Angad