2015-08-19 36 views
1

我找不到任何理由爲什麼我的斯堪的納維亞字符傳遞到PHP沒有顯示和正確存儲。什麼是錯誤的,當我嘗試從字符串與斯堪的納維亞字符從Android到PHP,像ÅÄÖ

當我使用我的web應用程序時,斯堪的納維亞字符可以正確使用php和數據庫。

如果我從webapp向數據庫寫入消息並將其加載到android應用程序,字符會正確顯示。

在機器人

String message = "Tässä" 

try { 

    // open a connection to the site 
    URL url = new URL("own_url"); 
    HttpURLConnection con = (HttpURLConnection)url.openConnection(); 


    con.setRequestMethod("POST"); 
    con.setRequestProperty("User-Agent", ""); 
    con.setRequestProperty("Accept-Language", "fi, en-US,fi;q=0.6, en;q=0.5"); 
    con.setRequestProperty("Accept-Charset", "UTF-8"); 

    // Send post request 
    con.setDoOutput(true); 

    String urlParameters = "message=" + message; 

在PHP

$message = $_POST['message']; 
error_log($message); 

error_log中示出了它喜歡Ť\ xe4ss \ XE4

mysqli_set_charset($con, 'utf8'); 
date_default_timezone_set('UTC'); 

$sql = "INSERT INTO messages SET message='$message'"; 
mysqli_query($con, $sql); 

在數據庫是T'SS

編輯

更改的查詢生成從而防止SQL注入,由於user2864740建議。

$stmt = $con->prepare("INSERT INTO messages (message) VALUES (?)"); 
$stmt->bind_param("s", $message); 
$stmt->execute(); 
+1

問題#1 - 使用字符串插值,請參閱http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php – user2864740

+0

'T \ xe4ss \ xe4' - 00E4 「ä」的unicode點;如果它被轉移utf-8編碼的東西像'c3 a4'應該顯示在某處... – VolkerK

+0

http://stackoverflow.com/questions/279170/utf-8-all-the-way-through –

回答

0

我找到了解決方案,我的問題,我需要urlParameters是像這樣的字節[]。

String urlParameters = "message=" + message; 
byte[] postData = urlParameters.getBytes(StandardCharsets.UTF_8); 

DataOutputStream wr = new DataOutputStream(con.getOutputStream()){}; 
wr.write(postData); 

但是有與API問題比19下,與此:

StandardCharsets.UTF_8 

領域需要API級19(當前min爲14):java.nio.charset.StandardCharsets#UTF_8

相關問題