2016-08-29 1 views
0

Ich habe eine Android-App, die Daten an eine Datenbank sendet, aber in der Datenbank werden einige Zeichen falsch gespeichert (Beispiel: í -> Ã).Spanische Zeichen ("` "," '"," ñ ") nicht in der Datenbank

Ich habe meine URLEncoder mit UTF-8, die Datenbank auch (wenn ich manuell "í" eingebe, "í" ist korrekt gespeichert, so denke ich, es ist kein Datenbankfehler) und ich in meinem PHP-Skript angegeben benutze UTF-8, also weiß ich nicht, was ich noch versuchen könnte.

Java

public class SendPostRequest extends AsyncTask<String, Void, String> { 

    protected void onPreExecute(){} 

    protected String doInBackground(String... arg0) { 

     try { 

      URL url = new URL("https://www.web.com/script.php"); // here is your URL path 

      JSONObject postDataParams = new JSONObject(); 
      postDataParams.put("user", user); 
      postDataParams.put("texto", edit_text_value); 
      postDataParams.put("l_origen", lengor_value); 
      postDataParams.put("l_destino", lengdest_value); 
      postDataParams.put("precio", precio); 
      postDataParams.put("num_pal", num_pal); 
      Log.e("params",postDataParams.toString()); 

      HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
      conn.setReadTimeout(15000 /* milliseconds */); 
      conn.setConnectTimeout(15000 /* milliseconds */); 
      conn.setRequestMethod("POST"); 
      conn.setDoInput(true); 
      conn.setDoOutput(true); 

      OutputStream os = conn.getOutputStream(); 
      BufferedWriter writer = new BufferedWriter(
        new OutputStreamWriter(os, "UTF-8")); 
      writer.write(getPostDataString(postDataParams)); 

      writer.flush(); 
      writer.close(); 
      os.close(); 

      int responseCode=conn.getResponseCode(); 

      if (responseCode == HttpsURLConnection.HTTP_OK) { 

       BufferedReader in=new BufferedReader(new 
         InputStreamReader(
         conn.getInputStream())); 

       StringBuffer sb = new StringBuffer("FUAAARK"); 
       String line=""; 

       while((line = in.readLine()) != null) { 

        sb.append(line); 
        break; 
       } 

       in.close(); 
       return sb.toString(); 


      } 
      else { 
       return new String("false : "+responseCode); 
      } 
     } 
     catch(Exception e){ 
      return new String("Exception: " + e.getMessage()); 
     } 

    } 

    @Override 
    protected void onPostExecute(String result) { 
     Toast.makeText(getApplicationContext(), result, 
       Toast.LENGTH_LONG).show(); 
    } 
} 

public String getPostDataString(JSONObject params) throws Exception { 

    StringBuilder result = new StringBuilder(); 
    boolean first = true; 

    Iterator<String> itr = params.keys(); 

    while(itr.hasNext()){ 

     String key= itr.next(); 
     Object value = params.get(key); 

     if (first) 
      first = false; 
     else 
      result.append("&"); 

     result.append(URLEncoder.encode(key, "UTF-8")); 
     result.append("="); 
     result.append(URLEncoder.encode(value.toString(), "UTF-8")); 

    } 
    return result.toString(); 
} 

PHP

$precio = $_POST['precio']; 
$texto = $_POST['texto']; 
$user = $_POST['user']; 
$l_origen = $_POST['l_origen']; 
$l_destino = $_POST['l_destino']; 
$num_pal = $_POST['num_pal']; 

define('HOST','***'); 
define('USER','***'); 
define('PASS','***'); 
define('DB','***'); 

$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect'); 

mysql_query("SET NAMES 'utf8'"); 

$sql = "INSERT INTO users (username, precio, text_cli, l_origen, l_destino, num_pal) VALUES('$user','$precio','$texto','$l_origen','$l_destino','$num_pal')"; 

Vielen Dank für Ihre Zeit

+0

versuchen, die gleiche Android-Anfrage mit curl von einem Terminal zu machen, vielleicht können Sie feststellen, ob das Problem in der Android oder in PHP-Seite ist! –

Antwort

0

Ich habe einige Nachforschungen gemacht und festgestellt, dass mysqli_query("SET CHARACTER_SET_CLIENT='utf8'",$conn); nicht existiert, aber mysqli_query("SET CHARACTER_SET_CLIENT='utf8'",$conn);, die veraltet ist. Bitte korrigieren Sie mich, wenn ich falsch liege.

Stattdessen habe ich nach der Verbindung und vor der Abfrage an die DB folgenden setzen:

mysqli_set_charset($con, 'utf8'); 

das ist gut funktioniert. Also hier ist der „vollständige“ Code:

define('HOST','***'); 
define('USER','***'); 
define('PASS','***'); 
define('DB','***'); 

$con = mysqli_connect(HOST,USER,PASS,DB) or die('Unable to Connect'); 

mysqli_set_charset($con, 'utf8'); 

$sql = "INSERT INTO users (username, precio, text_cli, l_origen, l_destino, num_pal) VALUES('$user','$precio','$texto','$l_origen','$l_destino','$num_pal')"; 
1

Dinge in PHP/MySQL/UTF-8

- The database tables and text columns should be set to UTF-8 

- HTML page Content-Type should be set to UTF-8 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

- PHP should send a header informing the browser to expect UTF-8 

header('Content-Type: text/html; charset=utf-8'); 

- The PHP-MySQL connection should be set to UTF-8 

mysqli_query("SET CHARACTER_SET_CLIENT='utf8'",$conn); 

mysqli_query("SET CHARACTER_SET_RESULTS='utf8'",$conn); 

mysqli_query("SET CHARACTER_SET_CONNECTION='utf8'",$conn); 

- PHP ini has default_charset setting it should be utf-8 if you do not have access to it use ini_set('default_charset', 'utf-8'); 
betrachten
+0

Hallo, danke für deine Antwort. Ich habe alles versucht, aber es funktioniert nicht – alberzyzz

Verwandte Themen