西班牙语字符(“`”,“'”,“ñ”)未显示在数据库中

时间:2016-08-29 10:59:55

标签: java php android utf-8

我有一个Android应用程序将数据发送到数据库但在数据库中有些字符存储错误(例如:í - >Ã)。

我的URLE编码器有UTF-8,数据库也是(如果我手动引入“í”,“í”是corerctly存储,所以我认为这不是数据库错误)我在我的php脚本中指出要使用UTF-8所以我不知道我还能尝试什么。

爪哇

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')";

非常感谢你的时间

2 个答案:

答案 0 :(得分:1)

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');

答案 1 :(得分:0)

我做了一些研究,发现--- execute previous code by Ben Bolker --- par(mfrow = c(2, 2)) plot(m) 不存在,但mysqli_query("SET CHARACTER_SET_CLIENT='utf8'",$conn);已被弃用。如果我错了,请纠正我。

相反,我在连接之后和查询之前将数据放入以下内容:

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

哪个工作正常。所以这是&#34;完成&#34;代码:

mysqli_set_charset( $con, 'utf8');