【发布时间】:2014-11-17 09:48:42
【问题描述】:
这个问题已经被问过很多次了,但没有一个建议的解决方案对我有用:(
我需要使用 Android 通过 PHP 向 MySql DB 中插入特殊字符,例如 '(右撇号)。
MySql 表定义为:
ENGINE=InnoDB DEFAULT CHARSET=utf8;
数据通过 Java 传递给 PHP,所以:
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("param1", value1));
nameValuePairs.add(new BasicNameValuePair("param2", value2));
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("blabla.php");
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));
response = httpclient.execute(httppost);
PHP 接收它是这样的:
//To be able to receive UTF-8 (needed?)
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
$param1 = $_POST['param1'];
$param2 = $_POST['param2'];
//Convertsion to UTF-8 (needed?)
$param1 = utf8_decode($param1);
$param2 = utf8_decode($param2);
$mysqli = new mysqli($hostname, $username, $password, $dbname);
mysqli_set_charset('utf8',$mysqli);
$mysqli->prepare("INSERT INTO ...
Insert 命令插入记录,但特殊字符变成“?”在表中。 有什么帮助吗?
即“A'B”在数据库中变为:“A?B”
谢谢
【问题讨论】:
-
显示您发送的小字符串的示例。然后显示 php 如何接收该字符串。所以在你把它放入数据库之前。而且在你解码它之前 utf8。我们想先知道数据库是否与它有关。
-
$mysqli分配后添加调用:$mysqli->set_charset("utf8"); -
我已经编辑了我的问题,添加了 set_charset 函数和一个示例。但我继续遇到这个问题! :'(
标签: php android mysql utf-8 special-characters