ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

prototype.jsコミュの文字化け

  • mixiチェック
  • このエントリーをはてなブックマークに追加
はじめまして。

いきなりコミュニティに参加で質問なんて極めて失礼なのですがお許しください。。。

現在Ajaxの開発をPrototype.js ver1.6 を使って開発しています。
フォームの入力項目をPOSTを使ってCGI(perl)に投げているのですが、CGIで受けた文字コードがUTF-8になります。
HTML/JSはすべてShift_JISです。

できればうけとるCGIにShift_JISで投げたいのですが。。
やはり、無理なのでしょうか・・・?

ちなみにソースは以下のようです
new Ajax.Request(url, {method: "post",
  parameters : Form.serialize(formID),
onSuccess:function(httpObj){
$('box').innerHTML = httpObj.responseText;
},
onFailure:function(httpObj){
$("box").innerHTML = "error";
}
});

Prototype.JSの設定も変更しています。

Ajax.Base = Class.create({
initialize: function(options) {
this.options = {
method: 'post',
asynchronous: true,
contentType: 'application/x-www-form-urlencoded;charset=Shift_JIS',
encoding: 'Shift_JIS',
parameters: '',
evalJSON: true,
evalJS: true
};
Object.extend(this.options, options || { });

本当に申し訳ございません。
どうぞよろしくお願いいたします!

コメント(12)

すみません、解決策はわからないのですが
基本的に、AjaxではSJISやEUCは使わない方が良いと思います。

Perlで文字コードの変換はすごく楽なので
Perl側でSJISに変換してはどうでしょうか。
ミルフィーユ(漢)さんありがとうございます。

そうなんですよねぇ。。。
ただPerlのバージョンが5.0.0.?見たいなんです。

なので、UTF-8は対応していないのではないかといわれてます。。
AjaxでUTF8じゃないとダメってのは、
色んなとこで見たり聞いたりしてます。
ただ、確実なソースが無いのでなんとも言えませんが・・・
他の文字コードで同じく文字化けした経験は何度もあります。
prototype.jsで文字コードの設定箇所があるのは、
safariなんかで文字コードをとりあえず指定しておいてあげないと
確実に文字化けしちゃうブラウザがあるからじゃないかな。(推測



あと、prototye.jsを読んだ時がかなり前なので、覚えていませんが、
paramを設定する時に、どこかでencodeURIComponentを使っている可能性があります。この場合、送信値は自動的にutf8になります。
ちなみにこのメソッドを使わないと送信値がエスケープされません。
(自分でやる方法はあるけど。)
使っていないか、prototype.jsを読んでみてください。
UTF8以外だと問題多いですよん。鯖側の助けが簡単でしょうね。
おじゃいマンさん。本当にご丁寧にありがとうございます。
体験も入れてくれて本当にわかりやすかったです〜!

おっしゃるとおりGET送信の際のencodeURIComponentをはずせばGETでは
UTFに変換されないのです。。。

ただ改行とかの問題でどうしてもPOSTで投げないとだめみたいで。。。。

うーん。。本当に難しいです。。。
どーーーーしても鯖側で文字コード変換できないってので、(ごめんperlわかんね)
GETで送信してもOKだったら、
encodeURIConponent外して、手動で問題のある文字列を変換すればOKじゃね?

=とか&とか?とかがメインで、あと考えられそうなやつと、
改行も。
おじゃいマンさん本当にありがとうございます!

今、Perlのほうで何とかしてくれと頼んでます。
まぁどうなるとこやら。。

でも引き続きこっちでもなんとかできないかいろいろググッてみます。
utf8が各ブラウザを通じて一番確実なんですよね。

iconvを挟んでなんとかならないのかなあ…。
サーバ側がどうしてもダメなら、iframeを使ったajaxもどきにするとか。
ちと携帯からなんであれなんですか、
いくらなんでもPerl5.0.0ってことは無いと思います(笑)
多分、5.6系なのかな
だったら、jcode.plでなく、Jcode.pmを使ってみてくれと確かutf8使えたかと。

古いCGI書きは、文字コード変換にjcode.plしか知らなかったりするんでこの機会に勉強してくれと。

というか、PerlでもSJISは結構トラブル起きますよ

mioさん。ありがとうございます。

いろいろやり方あるんですねぇ・・・・
iframeでごまかすかぁ、それもありですね!
ミルフィーユ(漢)さん
何度もありがとうございます!

実はPerl5.0.0なんです。。
クライアントの環境の問題です。。

しかも5〜6年前の古いソースの改変なんですよ。。
その時点ですでに不具合出っ放しです。。

もういやだ〜。。。

あ。思わず愚痴ってしまいました。
すみませんですうれしい顔
5以上でしたらJcode.pm動くようです。

JavaScriptとの連携考えるなら、UTF8で受けられるようにしてくれと
言った方がいいと思いますね。

みなさま今回は本当にありがとうございました。

最終的にどうなったかと申しますと
仕様が変更になり、Ajaxではなく、CGIでの遷移に変わりました。。

結局具体的な解決策は見つからないままです。。。

でもやはりみなさまの言うとおり、AJaxでSJISって言う時点で不可能の可能性がありますよね・・・

でも、本当にこころ強かったです。
ありがとうございました〜わーい(嬉しい顔)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

prototype.js 更新情報

prototype.jsのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング