掲示板をPerlで作成してもらい、社内で使っておりますが、ユーザーIDに『ー』(例えばカードの2文字めの伸ばす文字)を使用すると、登録時は問題ないのですが、ログイン時の認証でCGIのエラーとなります。

掲示板を作って頂いた方に伺うと、
**********************************
表示は問題ないのですが、Perlの一部の関数
(おそらく正規表現を使用できる文字列操作関数)で
「ー」という文字を使うとエラーになるようです。
**********************************
という分析を頂いております。

この問題の解決方法はございませんでしょうか。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

全角の「ー」であればSJIS表現で送信されてきた場合、2バイト目がブラケットなので正規表現関数系で引っかかりますね。


対処方法としては
1、エスケープする
2、コード体系を変更し、引っかからないものにする
という方法があります。
一般的には2の方法、つまり下記でlucky111さんが提示されている方法を使うのですが、その場合、半角でブラケットやハイフンなど正規表現でのメタキャラクタがある場合にもうまく通らなくなってしまいます。
なので
・本当に正規表現関数評価が必要かもう一度チェックして必要無いのであれば、通常の文字列検査に変更する。
・ヤバそうな文字は全部エスケープする。
等の方法を取った方が良いでしょう。
    • good
    • 0

jcode.plを使えば解決できます。



グーグルなどで探せば、どこかに落っこちてると思うので、それを、プログラムと同じフォルダに入れ、(パスが通っていればどこでも構いません)例えば$idにIDが入っていれば、

require 'jcode.pl';
&jcode'convert(*id,'euc');

とすれば、$idがEUCになるので、「ー」でエラーになりません。
    • good
    • 0

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

このQ&Aと関連する良く見られている質問

QPerlにおけるのようなPerlのバージョンなどのチェック機能はございますか?

 Perlにおける<?phpinfo();?>のようなPerlのバージョンなどのチェック機能はございますか?
利用しているサーバのPerlの正確なバージョン(5.8.1など。5.8までではなく)やインストールされているモジュールなどが知りたいので。

Aベストアンサー

1行目のパスにコマンドを追加してもエラーが返るだけなので、

print "Content-type: text/plain\n\n";
print `perl -v`;
print `perl -V`;
print `find \`perl -e 'print "@INC"'\` -name '*.pm' -print`;

のように、コマンドをバッククォートで括ってprintさせれば出力されます。

Qperlで掲示板を

perlの本を買ってきてサンプルプログラムでwindows内のサーバーでのcgiは動いたのですが、実際にプロバイダーにアップロードしようとしているのですが、upするファイルはcgi-libと実際に書いたcgiだけでいいのでしょうか。他に何かupする必要があるのでしょうか?なんか、ちょっと怖くて適当にはupできないでいます。

Aベストアンサー

とにかく、掲示板CGI本体が入っているフォルダ全部をアップロードしたら、動くのではないのでしょうか。
恐らくそういう本なので、掲示板用のフォルダをつ作って、その中に必要なファイルをすべてぶち込んでいるはずです。まとめてアップロードして、パーミッションを本通りに設定すれば、上手くいくと思います。
とにかく、一発目で動く保障はないです。だから、安心してアップロードして、失敗して、パーミッションいじったりファイルをアップしたり削除したりして、何とかがんばってください。
失敗を恐れずチャレンジです。

QYahooの掲示板のような掲示板を作るのにはどうしたらいいのですか?

Yahooのトップページのトピックスをクリックすると、
そのトピックスにはコメントができるものがあります。
(一種の掲示板ですよね)
そこには、「私もそう思う」「私はそう思わない」
というボタンがあります。
そして、「並べ替え」「そう思う順」「そう思わない順」
「注目順」「共感順」というボタンがあって、並べ替えが
できるようになっています。
このような”掲示板”を作るにはどうしたらいいのでしょうか?

一応、「Perl/CGI入門」のような本を読んでみましたが、
「並べ替え」が出来るような記述は見当たりませんでした。

もっと、たくさん本を読んで勉強すれば出来るのかもしれませんが、
やみくもに本を買うのは得策ではないと思うので、
経験者の方、知識のある方のアドバイスをいただけたら
幸いです。
どうか、ご教授願います。

Aベストアンサー

#!/usr/bin/perl -T
use warnings;
use strict;
use utf8;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI::Pretty;

my @threads = (
{ name => 'AAA',
date => '2009-01-03',
subject => '333',
},
{ name => 'BBB',
date => '2009-01-02',
subject => '111',
},
{ name => 'CCC',
date => '2009-01-01',
subject => '222',
},
);

my $q = CGI->new();

my ($sort_key) = $q->param('sort_key');
if (( !defined $sort_key )
|| ( ( $sort_key ne 'name' )
&& ( $sort_key ne 'date' )
&& ( $sort_key ne 'subject' ) )
)
{
$sort_key = 'name';
}

my @tables;
foreach my $thread ( sort { $a->{$sort_key} cmp $b->{$sort_key} } @threads ) {
push @tables,
$q->p(
"name = $thread->{name}, date = $thread->{date}, subject = $thread->{subject}"
);
}

print $q->header( -charset => 'UTF-8' ),
$q->start_html(
-lang => 'ja',
-title => 'Sort'
),
$q->a( { -href => $ENV{SCRIPT_NAME} . '?sort_key=name' }, 'Sort Name' ),
$q->br,
$q->a( { -href => $ENV{SCRIPT_NAME} . '?sort_key=date' }, 'Sort Date' ),
$q->br,
$q->a( { -href => $ENV{SCRIPT_NAME} . '?sort_key=subject' },
'Sort Subject' ),
$q->br,
@tables,
$q->end_html;

#!/usr/bin/perl -T
use warnings;
use strict;
use utf8;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
use CGI::Pretty;

my @threads = (
{ name => 'AAA',
date => '2009-01-03',
subject => '333',
},
{ name => 'BBB',
date => '2009-01-02',
subject => '111',
},
{ name => 'CCC',
date => '2009-01-01',
subject => '222',
},
);

my $q = CGI->new();

my ($sort_key) = $...続きを読む

Qperlで作った掲示板、エラーが出てしまう。

課題でperlの掲示板を作成したのですが、動作せず困っています。間違いを教えてください。

#!C:/Perl/bin/perl

require 'html_data.pl';
require 'cgi-lib.pl';
require 'jcode.pl'

if($ENV{'REQUEST_METHOD'}eq"POST"){


&ReadParse(*answer);


$name=$answer{'name'};
$mail=$answer{'mail'};
$title=$answer{'title'};
$text=$answer{'text'};

$name=~s/,/,/g;
$name=~s/&/&/g;
&name=~s/"/"/g;
$name=~s/<</g;
$name=~s/>/>/g;

$mail=~s/,/,/g;
$mail=~s/&/&/g;
&mail=~s/"/"/g;
$mail=~s/<</g;
$mail=~s/>/>/g;

$title=~s/,/,/g;
$title=~s/&/&/g;
&title=~s/"/"/g;
$title=~s/<</g;
$title=~s/>/>/g;

$text=~s/,/,/g;
$text=~s/&/&/g;
&text=~s/"/"/g;
$text=~s/<</g;
$text=~s/>/>/g;

$data="$name,$mail,$title,$text";

&jcode'convert(*data,'sjis');

if($name ne""&& $title ne""&& $text ne""){

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time());

$mon=$mon+1;

@youbi=('日','月','火','水','木','金','土');

$time="$mon月$mday日$youbi[$wday]曜日$hour時$min分";

$all_data="$time,$data\n";

open(ANSWER,"<answer.dat");

@all=<ANSWER>;

close(ANSWER);

unshift(@all,$all_data);

open(ANSWER,">answer.dat");

flock(ANSWER,2);

print ANSWER @all;

flock(ANSWER,8)

close(ANSWER);

}

}

&form;

open(ANSWER,"<answer.dat");
@all=<ANSWER>;

foreach(@all){

($time,$name,$mail,$title,$text)=split(/,/,$_);

&toukou;

}

close(ANSWER);

&footer;

exit;

課題でperlの掲示板を作成したのですが、動作せず困っています。間違いを教えてください。

#!C:/Perl/bin/perl

require 'html_data.pl';
require 'cgi-lib.pl';
require 'jcode.pl'

if($ENV{'REQUEST_METHOD'}eq"POST"){


&ReadParse(*answer);


$name=$answer{'name'};
$mail=$answer{'mail'};
$title=$answer{'title'};
$text=$answer{'text'};

$name=~s/,/,/g;
$name=~s/&/&/g;
&name=~s/"/"/g;
$name=~s/<</g;
$name=~s/>/>/g;

$mail=~s/,/,/g;
$mail=~s/&/&/g;
&mail=~s...続きを読む

Aベストアンサー

syntax error at *** line 7, near "){"
syntax error at *** line 74, near ")

とりあえず、下記を2行目に以下を入れておくといいでしょう。(参考URL)
use CGI::Carp qw(fatalsToBrowser);

参考URL:http://allabout.co.jp/career/cgiperl/closeup/CU20040209A/

QPerlのフリーソフトの掲示板

でクッキー使用をうたい文句にしているものがあるのですが
何をクッキーに書きこんでいるのでしょうか?

Aベストアンサー

例えば一度書き込みをすれば次に書き込むときに名前やメールアドレス、削除パスなどを記入しないですむように、クッキーにそれらの情報を書き込んだり、二重投稿を防止するためにIPを書き込んだりするのです。


このカテゴリの人気Q&Aランキング

おすすめ情報