アプリ版:「スタンプのみでお礼する」機能のリリースについて

ヘッダーで文字コードをSJISになるように

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

と設定し、ボディ側のformで

<form method="post" action="xxxxx">
<input type="text" name="n" value="">
<INPUT type="submit" value="実行"><br />
</form>

とすると、サーバ側で受け取ったname="n"がutf-8になっています。
PHPですが、受け取った文字を
echo mb_convert_encoding($_POST["n"],"SJIS","utf-8"):
とSJISに変換し、表示すると、文字化けなく表示可能なのですが、そのままでは文字化けてしまいます。(表示側のHTMLも文字コードは上記と同様にヘッダーで文字コードを指定しSJISにしています。)

何が悪いのでしょうか?(特殊な環境としてはchrome+jquery mobileを使用しています。)
よろしくお願いします。

A 回答 (2件)

HTML本体の文字コード・・と言うのは遠い昔の--20年位前(^^)のお話で、HTML4.01(1999年)以降は


<form action="[URI]" method="post|get" accept-charset="文字符号化方法のリスト">
→accept-charset ( http://www.asahi-net.or.jp/%7Esd5a-ucd/rec-html4 … )

ですから、本文の記述に関わらず、エンコードは指定できます。

accept-charset="UTF-8"
accept-charset="iso-2022-jp,UTF-8,EUC-JP,Shift_JIS"
とブラウザが可能なエンコードを順次テストできるようリストを書いておくことも行われます。

 しかし、現実にはブラウザは様々で、携帯電話などは指定に関わらずShift_JISで送信したり、本文の文字コードに従うブラウザも実在しますから、データを受け取ったサーバー側で文字コードを判別して適切にエンコードする必要があります。
 PerlにしろPHPにしろ、文字コード判別のモジュールは利用できますから、問題ないでしょう。

ASCII JIS > UTF-8 > EUC-JP > SJIS ( http://www-ise3.ist.osaka-u.ac.jp/miura/?PHP%20G … )
ページの文字コードとは違う任意の文字コードをformから送信する方法|web bibo ( http://www.webbibo.com/blog/htmlcss/accept-chars … )
とか・・
 
    • good
    • 0

こんにちわ



試しに、Chromeから、perlで受け取ってみたら
あああ=「a=%82%A0%82%A0%82%A0」
として、受け取れました。

参考
http://charset.7jp.net/sjis.html


これで、試すと、どうでしょうかね?

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<title>testpage</title>
</head>
<body>
<form method="POST" action="test.cgi">
<textarea name="a">
</textarea>
<input type="submit">
</form>
</body>
</html>


以下、perl
#!/usr/bin/perl

print <<EOM;
Content-type: text/html

EOM
while(<STDIN>) {
print $_;
}


ただ、ガラケーで、がんばってUTF-8を指定したにも関わらず、
POSTなら大丈夫だったのですが、GETにしたら、勝手にShift-JISに
されてしまうことは、ありましたね。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています