HTTP Post преобразует € в? символ

мое приложение для Android взаимодействует через HTTP Post с PHP-сервером. Добавляю в HTTP-запрос следующий параметр:

   nameValuePairs.add(new BasicNameValuePair("text", message));

сообщение представляет собой строку и содержит символ €

на сервере работает PHP и получает запрос. К сожалению, символ € автоматически преобразуется в ? символ. Все остальные символы работают как "ä, ü, $, ß

на Android я не установил кодировку:

  HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://server.com/test.php");
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost); 
        HttpEntity entity = response.getEntity();
        is = entity.getContent();

на PHP-сайте у меня тоже ничего нет указанный. Вот код:

<?php

mysql_connect("blablaost.com", "blabla", "blabla") or die(mysql_error());
mysql_select_db("asfd") or die(mysql_error());
$mysqldate = gmdate( 'Y-m-d H:i:s');

$language = (int) $_REQUEST['language'];

mysql_query("blabla ... .$_REQUEST['text']. ") 
or die(mysql_error());  

mysql_close();

?>

$_REQUEST ['text'] содержит € , и это дает мне?

1 ответов


вторым параметром построения UrlEncodedFormEntity является кодировка передачи. Заменить на:

httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, "UTF-8"));

кроме того, убедитесь, что веб-страница, которая отображает значение, сообщает кодировку в браузере и соответствует этой кодировке. Чтобы сообщить кодировку в браузере, используйте

header("Content-Type: text/html;charset=UTF-8", true);

в PHP или

<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>

элемент под HTML <head>. Бывший козыри последнем, если оба обеспечены.

фактическая кодировка, которая файл PHP имеет (i. e. кодировка символов, отличных от ASCII, в нем) должна соответствовать одному файлу PHP как его типу контента. В зависимости от вашего редактора PHP могут быть разные способы установки кодировки файла. Например, в Visual Studio есть команда "сохранить с кодировкой".

EDIT re: несвязанная проблема:

чтобы удалить PHP magic quotes, я использую следующую функцию:

function deq($s) //Stands for "dequote"
{
    if($s == null)
        return null;
    return
        get_magic_quotes_gpc() ?
        stripslashes($s) : $s;
}

а затем вместо $_POST ["xxx"] я использую deq ($_POST["xxx"]), где соответствующий. Поскольку параметры сервера могут измениться (и сам сервер может измениться при переносе), функция dequote должна учитывать текущее значение параметра.