CGI-BBS > CGI > Perl > Perlの改造で自作CGIの表示エラーを改善したい。


カレッヂ
カレッヂ


質問者 ZONE  投稿日 2004/4/21(水) 11:56:05
初めてCGIの自作しています。パソコンはw2k、サーバはUNIXです。
sub namelink {
	open IN,"./data/t-data.cgi";
	while(<IN>){
		$tdata = $_;
		chop $tdata;
		($t_id) = (split(/\,/,$tdata))[0]; &jcode'convert(*t_id,'sjis');
		($t_name) = (split(/\,/,$tdata))[1]; &jcode'convert(*t_name,'sjis');
		$nk =~ s/$t_name/<a href=\"..\/t-view.cgi?id=$t_id\" target=\"_top\">$t_name<\/a>/g;
	}

このような記述を行っているのですが、表示させると・・・
・a href="../t-view.cgi?id=20040420224146" target="_top">
・a href="../t-view.cgi?id=20040420224146" target="_top">
・a href="../t-view.cgi?id=20040420224146" target="_top">
・a href="../t-view.cgi?id=20040420224146" target="_top">
・a href="../t-view.cgi?id=20040420224146" target="_top">ヤ
・a href="../t-view.cgi?id=20040420224146" target="_top">q

となっています。
趣旨は、名前部分にのみCGIへのリンクがついて、クリックするとt-view.cgiが表示されるというものです。
初心者なので、出来れば具体的に、「どこをどうすればよいのか」的な回答いただければ幸いです。よろしくお願いいたします。
 
 
 
    
 
 

プロバイダ参照:infoseek
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:MKEditor
FTPソフト:FFFTP
サーバ移転:していない
改造:(未選択)
CGI習熟度:(未選択)

回答者 sim  [削除]  投稿日 2004/4/21(水) 14:04:21
$t_nameがマルチバイト文字であれば、sjisよりもEUCでやった方がいいかもです。

他にもっといい方法があると思うので変更を試みるのが一番良いかもです。
t-data.cgiがテンプレート的な役割なのであれば、IDだけを書き換えれば事足りる処理かと思います。
質問者 ZONE  [削除]  投稿日 2004/4/21(水) 15:52:26
私にもどうしたら最適なのか分かりません。
名前のデータがSHIFT-JISなのでEUCではなくSHIFT-JISで作りたいと考えています。
その場合、どういった方法があるのか、教えていただけませんでしょうか?

具体的には、下記のアドレスにソースがあります。
http://zyforce.hp.infoseek.co.jp/sc.txt

御手数おかけしますが、よろしくお願いいたします。
回答者 sim  [削除]  投稿日 2004/4/21(水) 17:00:20
sub namelink {
 open IN,"./data/t-data.cgi";
 while(<IN>){
  $al = '<a href="../t-view.cgi?id='.(split(/,/))[0].'" target="_top">'.$t_name.'</a>';
  $nk =~ s/$t_name/$al/g;
 }
  close(IN);
}

これでは動きませんか?
質問者 ZONE  [削除]  投稿日 2004/4/21(水) 17:55:29
Unrecognized character \x81 at ./sc.cgi line 604.
こんなエラーが着てしまいました。
回答者 sim  [削除]  投稿日 2004/4/22(木) 04:27:41
関係ないかもですが修正です。

sub namelink {
 open IN,"./data/t-data.cgi";
 while(<IN>){
  ($t_id,$t_name) = split(/\,/)
  $al = "<a href=\"../t-view.cgi?id=$t_id\" target=\"_top\">$t_name</a>";
  $nk =~ s/$t_name/$al/g;
 }
 close(IN);
}

$t_nameにマルチバイト文字が入ってるとUnrecognized characterが出たりするかもです。
質問者 ZONE  [削除]  投稿日 2004/4/22(木) 09:56:43
全角の漢字を使っています。
その場合はどのような変更が必要でしょうか?
回答者 しあわせのツボ  [削除]  投稿日 2004/4/22(木) 11:30:59
横入り失礼。
?x81だと、一番ありがちなのは?x8140(SJISの全角スペース)です。
インデントに全角スペースを使っていて、それをそのままペーストしたのでは?
質問者 ZONE  [削除]  投稿日 2004/4/22(木) 11:51:11
やはりいろいろなことを考慮するとEUCでしたほうがよいのでしょうか?
質問者 ZONE  [削除]  投稿日 2004/5/8(土) 11:34:55
この件について新たな事実が分かりました。
データ内名前項目に「ー」があると誤動作することが分かりました。
この場合「ー」があっても正常に動作させるにはどのような処理が必要でしょうか?
回答者 しあわせのツボ  [削除]  投稿日 2004/5/9(日) 01:15:58
「ー」の2バイト目は"["に当たるコードです。
[だけあって、対応する]のない検索パターンを入れると
エラーになるのはわかりますよね?

スクリプト自体をEUCにしてしまえば簡単なのですが、それも
意図的に[を入れられるとやはりエラーになります。
なので、とりあえずスクリプトはSJISのままにしておいて、
Googleあたりで"quotemeta"を検索してみると良いと思います。

返信(回答)する

 


Web裏技