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で質問しましょう!
似たような質問が見つかりました
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- PHP PHPでユーザー情報を入力して簡易ログイン機能をつくってみたのですが 1 2023/05/29 08:51
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- JavaScript sessionStorageを調べています。 1 2023/06/20 12:41
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
メモリをアドレスを直接指定し...
-
JSONで文字列が長い時
-
CGI(Perl)で、Net::FTPを使いたい
-
リロード後にプルダウンの選択...
-
途中まで出来ているのですが‥(D...
-
Application.ScreenUpdating = ...
-
16進の10進変換について
-
VBAでPDFのコピーとリネームを...
-
c言語のプログラミングの問題で...
-
CLispのloop内の挙動について
-
実行時エラー 3020の対策
-
formで特定のinputを送信しない...
-
セレクトメニューで2つの項目...
-
子windowsからsubmit()後にclos...
-
全然分からず困っています。習...
-
セレクトボックスである項目を...
-
UWSC:ポップアップウインドウ...
-
vscode 文字化け
-
ACCESS テキストボックスを隙...
-
VB6で、長い時間かかる処理...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSONで文字列が長い時
-
メモリをアドレスを直接指定し...
-
フォームで入力した値を表示し...
-
【C#】数値の範囲チェックについて
-
ラズパイで感圧センサーを動か...
-
linq で 楽天ウェブサービスのX...
-
Perlでアルファベットを数...
-
CGIでのページ指定~その(2)
-
途中まで出来ているのですが‥(D...
-
CGIやPHPで外部ファイルの内容...
-
CGIからメールに書き出しする際...
-
デコードできない時があります><
-
map(STL)でinsertを行いたいで...
-
フォームのINPUT NAM...
-
gpioを使ってSPIをシミュレーシ...
-
Application.ScreenUpdating = ...
-
どちのほうがすきですか?
-
formで特定のinputを送信しない...
-
文字の横にプルダウンを表示さ...
-
16進の10進変換について
おすすめ情報