- 締切済み
初投稿です。
初投稿です。 質問の仕方がおかしいかもしれませんが、宜しくお願いいたします。 業務でウェブアプリケーションを作っています。 【質問】 FireFox でAjax でデータを送信すると、Content-Type に「application/x-www-form-urlencoded; charset=UTF-8」が設定されてしまいます。 jQuery の $.ajax() のオプションで、「contentType:"application/x-www-form-urlencoded"」と指定しているのですが、必ず「charset=UTF-8」が付加されてしまします。 何とか「charset=UTF-8」の付加を回避する方法は無いでしょうか? ちなみに開発環境は次の様になっています。 【サーバ】 OS:CentOS5.5(エンコードはEUC_JP) Webサーバ:Apach 2.0.63 DB:PostgreSQL 8.2.14 開発言語:Perl v5.8.7 CGI JavaScriptライブラリ:jQuery 1.4.3 【クライアント】 OS:WindowsXP SP3 ブラウザ:IE8、FireFox3.6.11、Safari4.0.4 charset=UTF-8」が設定されてしまい、送信した値がCGIで受け取れない。 【質問の背景】 サーバ側でデータが取得できない原因は、Perlモジュールの(CGI)Lite.pmがフォームの値を取得する処理で、次のようなコードとなっているためです。 ※一部抜粋します。 sub parse_form_data{ $content_type = $ENV{CONTENT_TYPE}; #####▼ 問題はこの部分です。 if (!$content_type || ($content_type eq 'application/x-www-form-urlencoded')) { #####▲ local $^W = 0; read (STDIN, $post_data, $content_length); $self->_decode_url_encoded_data (\$post_data, 'form'); return wantarray ? %{ $self->{web_data} } : $self->{web_data}; } elsif ($content_type =~ /multipart\/form-data/) { ($boundary) = $content_type =~ /boundary=(\S+)$/; $self->_parse_multipart_data ($content_length, $boundary); return wantarray ? %{ $self->{web_data} } : $self->{web_data}; } else { $self->_error ('Invalid content type!'); } } 上記の書き方では、$content_type に値が入ってこないか、「application/x-www-form-urlencoded」だったらとなってしまいます。(あってますよね) 「charset=UTF-8」が付加されたときここを通ってくれずエラー扱いされてしまいます。 先輩に相談したところ、できるだけサーバのモジュールはいじりたくないとのことです。 また、GETメソッドもできるだけ使いたくないといわれました。 長文になってしまいましたが、なにとぞ宜しくおねがいいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
もし、shinjin_08さん の言うような処理が行われているとしたらモジュールが古いのかもしれません CGIモジュールは世界中の人が使っているはずなので、なんらかの対応がなされているはずです モジュールのバージョンを最新のにしたらいいような気もします。 >先輩に相談したところ、できるだけサーバのモジュールはいじりたくないとのことです。 そのとおりです!! いじる=モジュールを書き換える なんてのは絶対にしてはいけないことですよ オーバーライドという方法があります。 先に呼び出した関数と同じ名前の関数を後からつくるとオーバーライドしたことになります モジュール名::関数名 もしくは $モジュール名::変数名 が正式な関数名ですので、この方法も選択肢の一つになると思います。 このほかにも、やり方はいろいろあります。 他のコードとのからみやサーバ権限の問題もあるでしょうから とりあえずここまでにしときますね そ・れ・と 質問のタイトル 質問内容がわかりやすいようにしたほうが 後の方のためにもなると思いますよー
- yyr446
- ベストアンサー率65% (870/1330)
上記の書き方では、$content_type に値が入ってこないか、「application/x-www-form-urlencoded」だったらとなってしまいます。(あってますよね) =>PerlのLite.pmでのリクエストヘッダーの取得について、詳しいわけじゃ ないですが、違うと思います。 $content_typeはあくまで、"application/x-www-form-urlencoded"で、 "charset=UTF-8"は 、$charset "UTF-8" じゃないでしょうか?
お礼
回答ありがとうございます。 $content_typeはあくまで、"application/x-www-form-urlencoded"で、 "charset=UTF-8"は 、$charset "UTF-8" じゃないでしょうか? → 私の文章が悪かったですね。 言いたかったのは、$content_type="application/x-www-form-urlencoded; charset=UTF-8"と値が 入ってくるので、絶対にエラーになってしまうといいたかったのです。 ありがとうございました。