android - phpへのPOST送信において

916 views
Skip to first unread message

jabee

unread,
Sep 26, 2011, 11:04:19 PM9/26/11
to 日本Androidの会
初投稿です。よろしくお願いします。

androidでPHPに文字列をPOST送信しようとしていますが、PHP内で文字化けを起こしてしまい困っています。


---android---
public class MainActivity extends Activity {
private static final String url = "http://jabee0419.lolipop.jp/
ranking/test.php";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

//クライアント設定
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);

//POST送信するデータを格納
List<NameValuePair> nameValuePair = new
ArrayList<NameValuePair>(1);
String text = "あいうえお";


nameValuePair.add(new BasicNameValuePair("text", text));

try
{
//POST送信
httppost.setEntity(new
UrlEncodedFormEntity(nameValuePair));
HttpResponse response = httpclient.execute(httppost);
ByteArrayOutputStream byteArrayOutputStream = new
ByteArrayOutputStream();
response.getEntity().writeTo(byteArrayOutputStream);

//サーバーからの応答を取得
if(response.getStatusLine().getStatusCode() ==
HttpStatus.SC_OK)
{
TextView tv = (TextView) findViewById(R.id.textView1);
String str = byteArrayOutputStream.toString();
tv.setText(str);
}
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
}
}



---PHP---
<?php

$text = htmlspecialchars($_POST["text"]);

$text = mb_convert_encoding($text, 'utf-8');

echo "POST....".$text;


?>



androidの文字コードがutf-8、PHP内がshift-jisなのですが

PHP内にmetaタグで
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">を挿入し
ても
解決されません。半角英数字はきちんと表示されます。

ご助力お願いします。

天霧智哉

unread,
Sep 27, 2011, 12:21:32 PM9/27/11
to android-g...@googlegroups.com
jabeeさん

天霧と申します。

UrlEncodedFormEntityを使用されているので、その第二引数にPHP側が期待しているエンコード
(恐らく "UTF-8" かな)
も指定するといいかもしれません。

※当方もhttpのpost処理を最近やったのですがUrlEncodedFormEntityを使っていなかったので
動作確認できず推測でのアドバイスになりますが。。。

http://developer.android.com/reference/org/apache/http/client/entity/UrlEncodedFormEntity.html
↑リンク先のコンストラクタの上のほうですね。

もっと詳しい人いらっしゃいましたら、(これで解決しないようなら)ご助力願います。

それでは失礼します。

2011年9月27日12:04 jabee <imamic...@gmail.com>:

> --
> このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
> このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
> このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
> 詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。
>
>

yuka2py

unread,
Sep 28, 2011, 12:41:11 AM9/28/11
to android-g...@googlegroups.com
こんにちわ。

「ゆぅか」改め「ゆぅ」でまいります。ゆぅです♪
動かして確認などしていないので、違ってたらすみませんが、
PHP のほうに問題があるように思います。

PHP コードが SJIS とのことですが、出力エンコードが SJIS という意図でしょうか?
であれば、以下が正しいように思います。

$test = $_POST["text"];
$text = mb_convert_encoding($text, 'SJIS-win', 'utf-8');
$text = htmlspecialchars($text);
echo "POST...." . $text;

また 出力エンコードが utf-8 なら、次で OK だと思います。

$test = $_POST["text"];
$text = htmlspecialchars($text);
echo "POST...." . $text;

http ヘッダにエンコードが書かれていると思いますので、
そちらを確認してみて、整合性をとるようにしてください。

Android からの POST 値は何かしなければ UTF8 になると思います。
UTF8 が入ってきて、何で出力されるか意識すると良いと思います。

蛇足ですが、PHP コードのエンコードは、本質的にはあまり関連ありませんので、
出力エンコードにあわせて書かれると気にすることが減ると思います。

★ここまで書いてなんですが、違ってたらすみません。(^ ^

よろしくお願いいたします。
ゆぅ。

2011年9月27日12:04 jabee <imamic...@gmail.com>:

Reply all
Reply to author
Forward
0 new messages