当我尝试使用从Android到Php的斯堪的纳维亚字符发布字符串时有什么问题,比如ÅÄÖ

时间:2015-08-19 08:47:45

标签: java php android post http-accept-language

我找不到任何理由为什么我的斯堪的纳维亚字符传递给php没有正确显示和存储。

当我使用我的网络应用程序时,斯堪的纳维亚字符可以正常使用php和数据库。

如果我从webapp向数据库写入消息并将其加载到Android应用程序,则字符会正确显示。

在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显示为 T \ 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

编辑

由于user2864740的建议,更改了查询生成以防止SQL注入。

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

1 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法,我需要将urlParameters设为byte []。

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(当前最小值为14):java.nio.charset.StandardCharsets#UTF_8