
HTMLのShift_JISに合わせて、Jcode.plで日本語コード変換のeucをsjisに変更したのですが、"ー"が$FORM{'key'}に含むとサーバーエラーになります。
どうしたら、sjisで"ー"など一部文字でエラーなく処理できるのでしょうか?
アドバイスお願い致します。
if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
else { $buffer = $ENV{'QUERY_STRING'}; }
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/, $pair);
$name2 = $name;
$value2 = $value;
$FORM2{$name} = $value;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,'sjis'); #←ここを変更
No.1ベストアンサー
- 回答日時:
"ー"はSJISでメタ文字"["を含むためのエラーのようです。
foreach中はむしろeucやutf8のような、問題を起こさない文字コードに変換して処理をさせ、printする直前でsjis等に戻してやるのが良いと思いますが、
それ以前にコードの書き方そのものが旧世紀の負の遺産らしいです。
以下のコードにするだけで片付くかもしれません。
#!/usr/bin/perl -T
use strict;
use warnings;
use CGI;
my $q = CGI->new();
my $name = $q->param('name');
my $value = $q->param('value');
print "$name\n";
print "$value\n";
詳しくは参考URLをご覧下さい。
参考URL:http://blog.livedoor.jp/dankogai/archives/507807 …
No.2
- 回答日時:
No.1さんがおっしゃるように、EUC-JPかUTF-8で処理するのが一番スマートかと思い
ます。
おそらく正規表現のところでエラーが出ているのだと思います。
まず、どこでエラーが出ているのかを以下の文を追加して特定してください。
use CGI::Carp qw(fatalsToBrowser);
そして、エラーの出ている正規表現で、quotemataをするか、/\Q~\E/でメタ文字を
無効化してみてください。
ご回答ありがとう御座います。
quotemataはエラーはメタ文字無効化はでませんが、別の課題もありますので、EUC-JPに戻して処理することにしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSONで文字列が長い時
-
map(STL)でinsertを行いたいで...
-
Perlでアルファベットを数...
-
Application.ScreenUpdating = ...
-
VB6で、長い時間かかる処理...
-
16進の10進変換について
-
セレクトメニューで2つの項目...
-
formで特定のinputを送信しない...
-
テーブル内でドロップダウンメ...
-
STLのlistで重複するものだけを...
-
初回起動のみ判別したい
-
ACCESS テキストボックスを隙...
-
文字の横にプルダウンを表示さ...
-
<SELECT>タグの折り返し
-
実行時エラー 3020の対策
-
html select optionが左寄せに...
-
FindFirst を複数条件で検索
-
c言語 16進数の2進数への変換
-
シェルスクリプトで、空白(ス...
-
関数「exists」と「defined」の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSONで文字列が長い時
-
メモリをアドレスを直接指定し...
-
リロード後にプルダウンの選択...
-
フォームのINPUT NAM...
-
【C#】数値の範囲チェックについて
-
linq で 楽天ウェブサービスのX...
-
ラズパイで感圧センサーを動か...
-
map(STL)でinsertを行いたいで...
-
formのvalueについて
-
jcode.plの使い方
-
CGI(Perl)で、Net::FTPを使いたい
-
Perlでアルファベットを数...
-
tr///;はカンマを処理できない...
-
gpioを使ってSPIをシミュレーシ...
-
半角スペースが有効にならない。
-
連結リストについて
-
Application.ScreenUpdating = ...
-
formで特定のinputを送信しない...
-
実行時エラー 3020の対策
-
<SELECT>タグの折り返し
おすすめ情報