1

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 は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();
4

1 に答える 1

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

于 2015-08-19T17:27:26.270 に答える