西班牙语字符(", "´", "ñ")在数据库中不


Spanish characters ("`", "´", "ñ") not showing in database

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

我已经得到了我的URLEncoders与UTF-8,数据库也(如果我手动引入"í","í"是正确存储的,所以我认为这不是数据库故障),我在我的php脚本中指示使用UTF-8,所以我不知道我还能尝试什么。

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

非常感谢您的宝贵时间

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

我做了一些研究,发现mysqli_query("SET CHARACTER_SET_CLIENT='utf8'",$conn);不存在,但mysqli_query("SET CHARACTER_SET_CLIENT='utf8'",$conn);已被弃用。如果我说错了,请纠正我。

相反,我在连接之后和对DB的查询之前放置了以下内容:

mysqli_set_charset( $con, 'utf8');

工作正常。下面是"完整"代码:

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