我有一个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')";
非常感谢你的时间
答案 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');