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 должна учитывать текущее значение параметра.