2012-01-04 5 views
6

私のAndroidアプリはHTTP POST経由でPHPサーバーと通信します。 は、私は、パラメータ次のHTTPリクエストに追加します。HTTP Postは€を?に変換しますか?シンボル

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

メッセージは文字列で、実行しているサーバーのPHPで

€記号が含まれており、要求を取得します。 不幸にも€記号は自動的に?に変換されますか?シンボル。私も何も指定されていないPHPのサイトで

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

をここにコードを:: 他のすべての記号は、私は何のエンコーディングを設定していないAndroidでは

SS、A、U、$」のように働いている。

<?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 [ 'テキスト']は€が含まれており、それがUrlEncodedFormEntityの第2の構成パラメータがトンである私に?

+0

両方の側が送信している/期待しているエンコードを確認できますか? –

+0

PHP側でurldecode()とrawurldecode()を使いこなすのは幸運ですか? どのように結果を確認していますか? –

+0

PHPサーバの出力/入力エンコーディングはISO-8859-1と思われる。私はそれをmySQL DBに書いてチェックします。しかし、これは間違いではありません!私はurldecode()で何をすべきかわかりません。 – tobias

答えて

2

を与えます送信符号化。交換してください:

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

はまた、値を表示するWebページがブラウザに文字セットを報告し、その文字セットに準拠していることを確認します。ブラウザに文字セットを報告するには、HTMLの <head>

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

、または

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

要素のいずれかを使用します。前者は、両者が提供されている場合、後者よりも優先されます。

PHPファイルの実際のエンコーディング(つまり、非ASCII文字のエンコーディング)は、そのContent-TypeとしてのPHPファイルのクレームと一致する必要があります。 PHPエディタによっては、ファイルのエンコーディングを設定する方法が異なる場合があります。 Visual Studioでは、たとえば、 "エンコードで保存"コマンドがあります。

EDIT再:無関係な問題:

PHPマジッククオートを削除するには、私は次の関数を使用します。その後、

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

、代わりの$ _POST [ "XXX"]、私はDEQ($を使用します_POST ["xxx"])を入力します。サーバーの設定は変更される可能性があり(移行するとサーバー自体が変更される可能性があります)、逆引き関数は設定の現在の値を考慮に入れなければなりません。

+0

今、私は€のような記号をつけています。私はphpファイルでもエンコーディングを設定しなければならないと思いますか? – tobias

+0

PHPファイルのエンコーディング(つまり、非ASCII文字のエンコーディング)は、Content-TypeとしてPHPファイルが要求するものと一致しなければなりません。 PHPエディタによっては、さまざまな方法があります。 Visual Studioでは、たとえば、「エンコードで保存」コマンドがあります。 –

+0

私はPHPファイルのエンコーディングをutf-8lfに入れましたが、この行に問題があります:if(md5 utf8_encode($ _REQUEST ['text']。 "test"))== $ _REQUEST ['hash '])テキストに€が含まれている場合、私は偽に評価されます – tobias

関連する問題