• 締切済み

設置場所場わかりません。

リンクのみが投稿されるスパムが横行しているようです。外国からと思いIPアドレス調査してみると、どうも外国とは限らないようなので、日本以外のIPアドレスを制限しても無駄でした。とりあえず、日本語が書かれていない(日本語コードが検知できない)場合に投稿できないようにする簡単な方法をご案内します。 jcode.plを利用し、文字コードを判定するものです。半角文字だけであれば全角コードは検知されません。プログラムによりチェックしたい変数名は異なりますので、掲示板であれば内容文などが入っている変数に読み替えてください。ここでは $LINE にチェックしたいデータが入っているものとします。また、エラー処理は &error(); だと仮定しますので、そのプログラムで使われている方法に書き換えてください。プログラムやデータをEUCで扱っている場合は euc が含まれるかどうかに変更してください。ここでは sjis が検知できない場合にエラー処理します。 if (&chkZenkaku($LINE) ne 'sjis') { &error("エラー","内容文に日本語コードが検知できませんでした。"); } sub chkZenkaku { local($line) = @_; (@line) = &jcode'getcode(*line); $line[1]; } という回答があったのですがjcode.plに上記をコピーして上書きしたらエラーになりページが表示されませんでした。 アドバイスお願いします。

  • CGI
  • 回答数2
  • ありがとう数1

みんなの回答

  • takbee
  • ベストアンサー率66% (2/3)
回答No.2

フォルダではなく、BBS.cgiというプログラムの中に書く必要があるのだと思います。 お使いのCGI(http://www.rescue.ne.jp/ の中のどれであるか)を教えていただければ、アドバイスできるかと思います。

fatejapan
質問者

補足

古いプログラミングでしたのでバージョンアップする事にしたのですが http://www.rescue.ne.jp/cgi/minibbs-ex/ # ↓管理用暗証番号の設定を # 添付のcrypt.cgiを設置して実行し、設定する暗証番号を入力して暗号を作成します。 # それをそのまま下記にコピーしてください。 上記をcrypt.cgiにアクセスし暗号を作成しコピーしてUPしたのですが うまく表示されません。 わかれば教えてください。

  • takbee
  • ベストアンサー率66% (2/3)
回答No.1

jcode.plではなく、あなたのプログラムに記述するのだと思います。

fatejapan
質問者

補足

http://www.rescue.ne.jp/ こちらのサイトよりCGI方は使わせて頂いているのですが BBS.cgiのフォルダの事ですか?

関連するQ&A

  • jcodeを使ったgetcode

    Perlで日本語を扱う際にjcode.plを使いたいと思いました。 問題点はgetcodeを使用した際に文字コードが出力されなかったということです。 'あ'はsjisと出るのですが 'a'は出力がありません。 文字コードが判別できなくてもなんらかの出力は得られるとWebで見たのでなぜ このような現象になるのか質問させていただきました。 参考にしたサイト http://www.mikeneko.ne.jp/~lab/kcode/jcode.html [ソース] #!/usr/local/bin/perl require './jcode.pl'; print "Content-type: text/html\n\n"; $line = 'あ'; $code = &jcode::getcode(\$line); print "print1 = $code\n"; $line = 'a'; $code = &jcode::getcode(\$line); print "print2 = $code\n"; [結果(コマンドプロンプト上)] Content-type: text/html print1 = sjis print2 = このようになる原因を知りたいです。回答や実行環境への質問などお願いします。 実行環境 1 OS: WindowsXP SP1a webサーバ: Apache 1.3.27 Perl: ActivePerl 5.8.0 ブラウザ: IE6.0 実行環境 2 infoseek無料webスペース

    • ベストアンサー
    • Perl
  • jcode.plのバグでしょうか?KCctchでの質問です。

    PerlのプログラムをKCatch.pmで調べていましたが。 次のような表示がされました。 jcode.plのバグでしょうか?プログラムに問題があるのでしょうか? お教えいただければ幸いです。 ../data/clients.txtが開けません。 Catch: Thu Jun 21 08:54:31 2001 -------------------------------------------------------------------------------- [jcode.pl:366:warn] Use of uninitialized value at jcode.pl line 366. > sub max { $_[ $[ + ($_[$[] < $_[$[+1]) ]; } [jcode.pl:362:warn] Use of uninitialized value at jcode.pl line 362. > $code = ('euc', undef, 'sjis')[($sjis<=>$euc) + $[ + 1]; -------------------------------------------------------------------------------- anquit.cgi with Perl 5.00502 for freebsd

    • ベストアンサー
    • Perl
  • 文字コード

    ある変数$aaaに文字列が入ってくるのですが $code = getcode( $aaa ); で文字コードを調べると、asciiと返ってきます。 文字コードをeucに変換したいので Jcode::convert(\$aaa,'euc'); としても文字コードはasciiのままです。 どのようにしたら eucに変換できるのでしょうか?

    • ベストアンサー
    • Perl
  • jcode.plのconvertを使用しなければならない場面とは?

    こんにちは。 jcode.plのconvertがjis,sjis,euc 間の相互変換が 行えるのはわかりました。 しかしながら、その用途がよくわかりません。 日本語にはその3種類の漢字コードがよく使われているのは なんとなくわかるのですが それを例えば &jcode::convert(\$test,'sjis'); というように、sjisにするというのは、どのような場面があって どのような必要性があってそのようにするのか? またeucに変換しなければならない場面等、 ネットで調べましたがその点がよくわからないのです。 例えば、Windows環境で生成されたテキストファイルの文字列を読み込んで Linux環境のPerlで出力しようとする時に、不具合が出るので 日本語は必ずEUCで変換する、など。 (この文章が正しいのかどうか適当です。 このような場面が世の中にはあって、その場合はこうする、というような 例として書きました) ご存知の方、どうぞよろしくお願いします。

    • ベストアンサー
    • Perl
  • Jcode.pmでconvertできない

    あけましておめでとうございます。 早速ですが、皆様のお力を拝借したく。 WindowsXPSP2+ActivePerl5.6.1でJcode.pmを使用して、utf8へ変換しようとしました。 http://okwave.jp/qa2600582.html を参考にJcode.pmを導入し(とある事情でインストールしておりません)、以下のソースを記述しました。 ちなみに"sjis"で記述しております。 #!/usr/local/bin/perl use lib "./lib"; use Jcode; $buf = "てすてすてす"; print "BeforeCode=".Jcode::getcode($buf)."\n"; Jcode::convert( \$buf, "utf8"); #$j = Jcode->new($buf); #$buf = $j->utf8; print "$buf\n"; print "AfterCode=".Jcode::getcode($buf)."\n"; exit; すると BeforeCode=sjis AfterCode=euc と表示され、"utf8"を指定したにも関わらず、"euc"に変換されてしまいました。 次に、上記ソースの中ほどを #Jcode::convert( \$buf, "utf8"); $j = Jcode->new($buf); $buf = $j->utf8; と書き換えてみました。すると、 BeforeCode=sjis Undefined subroutine &Jcode::_Classic::euc_utf8 called at lib/Jcode/_Classic.pm line 255. とエラーが出てしまいます。 見た感じeuc_utf8が存在しないと言われているようですが、Jcode\Unicode\NoXS.pmに存在しています。 環境に問題があるような気はしますが、どのようにすれば"utf8"への変換が成功するのでしょうか?ご教授いただければ幸いです。 ちなみに上記ソースで Jcode::convert( \$buf, "jis"); Jcode::convert( \$buf, "euc"); Jcode::convert( \$buf, "sjis"); はすべて成功し、指定した文字コードに変換されました。 "utf8"への変換だけが失敗するという状況で、新年早々頭を抱えております。

    • ベストアンサー
    • Perl
  • eucデータをsjisに変換できない。

    require './jcode.pl'; &jcode::convert(*name,'euc'); レンタルサーバーのMySQLがeucでしかデータを受け取らない ので以上のような形にしてSQL文を投げました。 結果、htmlでsjisにして吐き出す際に取り出すデータもeucで表示されるため変換できないかと悩んでいます。 while( @row = $sth->fetchrow_array() ) { 1jcode::convert(\$row,'sjis'.'euc'); 2jcode::convert(\$row,'sjis'); 3jcode::convert($row,'sjis'.'euc'); と複数試しましたがダメでした。 Perlのバージョンにより違いがあるので、 全ての先頭に&付けて再度試しましたがうまくエンコードできません。 どなたか解決方法をご存知の方、ご教授ください。

  • Jcode を使った複数選択値の文字コード変換について

    フォームから受け取った文字コードの処理において、普段下記の通りにしております。 use Jcode; &ReadParse; while(($k,$v)=each %in){ &Jcode::convert(\$v,"euc");} 基本的に元htmlがsjisだろうがutf-8だろうが問題なくeucに変換されているのですが、 複数選択(フォーム側がチェックボックスなどで、NAME値が複数ある場合)された変数だけは、eucに変換されず文字化けしてしまい、肝心の区切り文字である「\0」も消えてしまう状態です。 &Jcode::convert(\$v,"euc");の部分を、$v にしたり *v にしたり色々してみたのですが、複数選択が正しく処理されているときは単一項目がうまくいかなかったりという状態です。 getcodeで調べてみると、複数選択のフォームのコードは ucs2 となっていました。(元のhtmlはeuc。) 試しにvalue値を全て半角英数にしてみたのですが、同じく ucs2 と出ます。(単項目は euc と出ます。) 「\0」が含まれた文字列の変換を行う場合は、何か特別な処理が必要でしょうか?

    • ベストアンサー
    • Perl
  • 半角カナから全角カナに変換

    Jcode.pmを使用して半角カナから全角カナに変換したいのです。 こちらの過去ログを拝見し、以下のようなロジックを記述したのですが、 ”Undefined subroutine &Jcode::h2z_euc called at test_jcode.pl line 7.”というエラーが出てしまいます。 use Jcode; $line = 'アイウエオ'; $ato = &Jcode::h2z_euc(\$line); print $ato, "\n"; どなたかご回答よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • jcode.plのかわり

    jcode.plの jcode::tr() のかわりを探しています。 jcode.plの jcode::tr(\$val,'0-9A-Za-z ()_@-','0-9A-Za-z ()_@-'); をPerl5.18.2で使用するとエラーが出てしまいます。これを回避したい。 プログラムがUTF-8であれば $val =~ tr/0-9A-Za-z ()_@-/0-9A-Za-z ()_@-/; のようにすれば実現可能みたいですが、プログラムはEUCで書かれています。 影響範囲からプログラムの文字コードをかえることはできれば避けたい。 一文字ずつ変換することも考えましたが、この方法ではパフォーマンスに懸念があります。 jacode.plなるものもありますが、これに置き換えるだけでは文字化けしてしまいました。 jcode::tr()のかわりになるような手段はあるのでしょうか?

    • ベストアンサー
    • Perl
  • jcode.plについて

    次のエラーが発生します。 Undefined subroutine &jcode::convf called at ./jcode.pl line 291. カレントに、jcode.plを置いているだけでは動作するのでしょうか? また、Jcode.pmを使った場合、 &Jcode::convert(\$test_sjis, "sjis"); と大文字にしないといけないのですが、これは仕方ないことでしょうか? てっきり、 require './jcode.pl'と use Jcode.pmの差し替えで済むと思っていました。 #!/usr/bin/perl require './jcode.pl'; my $test = "パソコン結構です。"; #文字化けチェック用 my $test_sjis = $test; my $test_ujis = $test; my $test_jis = $test; &jcode::convert(\$test_sjis, "sjis"); &jcode::convert(\$test_ujis, "ujis"); &jcode::convert(\$test_jis, "jis"); print "\$test_sjis=[$test_sjis]\n"; print "\$test_ujis=[$test_ujis]\n"; print "\$test_jis =[$test_jis]\n"; exit; __END__

    • ベストアンサー
    • Perl

専門家に質問してみよう