2014-09-23 124 views
2

這個問題已經被問過很多次,但沒有建議的解決方案對我:(插入特殊字符/ PHP + MYSQL +安卓

工作,我需要插入特殊字符,如「(關閉撇號),例如成通過PHP MySQL數據庫使用Android

MySQL的表被定義爲:

ENGINE=InnoDB DEFAULT CHARSET=utf8; 

數據被傳遞到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 ... 

插入命令插入的記錄,但特殊字符表變爲 「?」。 有什麼幫助嗎?

即 「A'B」 成爲在DB: 「A B」

謝謝

+0

顯示您發送的小字符串的示例。然後顯示php如何接收該字符串。所以在你把它放入數據庫之前。並且在你解碼utf8之前。我們首先想知道數據庫是否與它有關。 – greenapps 2014-09-23 09:25:45

+0

'$ mysqli'賦值之後添加調用:'$ mysqli-> set_charset(「utf8」);' – Rimas 2014-09-23 09:43:23

+0

我編輯了我的問題,添加了set_charset函數和一個例子。但我繼續有這個問題! :'( – Geltrude 2014-09-23 11:57:43

回答

-1

嘗試mysqli_real_escape_string()函數。這會轉義字符串中的特殊字符以用於SQL語句中,同時考慮連接的當前字符集。

例子:

mysqli_real_ecape_string($mysqli,$param1); 
mysqli_real_ecape_string($mysqli,$param2); 
+0

)他正在使用準備好的語句,沒有任何一點逃避字符串。 – 2014-09-23 09:10:18

0

刪除調用utf8_decode功能的伎倆!