kcaptchaの導入について

kcaptchaを導入後、これを実際に使用するのは、

  • comment_kcaptcha.inc.php
  • comment2_kcaptcha.inc.php
  • pcomment_kcaptcha.inc.php
  • pcomment2_kcaptcha.inc.php

などのプラグインです。

※修正対応はすべて力任せにやっているので、保証できません。参考にして頂いて、実際の修正は、ご自身の判断で行ってください。

問題点

文字化け

  • 導入するプラグインとkcaptchaとpukiwiki(utf8版)の文字コードの相性が悪い(素人の理解はこの程度(>_<))ので、各プラグイン内に記述されている日本語メッセージが文字化けして表示できなかった。
  • この現象は、ソース保存時の文字コード指定を変えるような小細工では、ソースからWeb表示にまで、文字を正しく連動させることができない。
  • comment_kcaptcha.inc.php
  • comment2_kcaptcha.inc.php
  • pcomment_kcaptcha.inc.php
  • pcomment2_kcaptcha.inc.php

の各プラグイン内に、メッセージの euc=>utf8 変換ステップ を組み込むことで解決した。

※何の保証もしませんが参考まで・・・・
●HTMLタグを記述する部分に入る前に、次を記述 $desc_str = eucjp2utf8($desc_str);
●プラグインの最後部に追記 function eucjp2utf8($eucjp) { return mb_convert_encoding($eucjp, 'UTF-8', 'eucjp'); }

※comment_kcaptcha.inc.phpとpcomment_kcaptcha.inc.phpを同じページに記述すると画面が真っ白になってしまいます。 同じページに記述することは、基本的にはないのですが気持ち悪い。

kcaptchaが両方のプラグインを呼び出すので、ファンクション名がユニークでなくなるからのような気がします。あんまり意味は、分かりません(^_^;) そうでした。ファンクションの名称を変えれば、同じページに記述しても問題ありませんでした。

lib/func.php に記述すれば、各プラグインには記述する必要はなくなります。 (pukiwikiにそのようなファンクションがあれば、それを使えば良いのだろうと思いますが、確認していません。)

認証用画像が表示されないことがある

静的URL対応(ディレクトリ偽装)しているので、認証用画像が表示されない。 各プラグインの認証用画像の記述を変更して解決しました。

【変更前】  <img src="$kcaptcha_img" />
【変更後】  <img src="$script/$kcaptcha_img" />

これだけで上手く行かない場合は、どこかに $script = get_script_uri(); と記述すると、上手くいくようです。

PukiWiki article 用 CAPTCHA プラグイン

article_kcaptcha.inc.php
http://nao.s164.xrea.com/td/2007-11-07.html

関連情報

コメントの認証
http://pukiwiki.sourceforge.jp/dev/?BugTrack2%2F197
http://meteora.ucsd.edu/~kyoshimura/?IT%20memo%2Fwikimemo%2Fkcaptcha

処理後の戻り先URL

処理後のURLの戻り先が私の趣味に合わないので修正

  • comment_kcaptcha.inc.php
  • comment2_kcaptcha.inc.php
  • pcomment_kcaptcha.inc.php
  • pcomment2_kcaptcha.inc.php

は、それぞれ

  • comment.inc.php
  • comment2.inc.php
  • pcomment.inc.php
  • pcomment2.inc.php

を呼び出して処理されるので両方を修正

対応内容(通常処理用)

赤文字:追加
青文字:削除

  • comment.inc.php

    pkwk_headers_sent();
    header('Location: ' . get_script_uri() . anchor_replace(rawurlencode($vars['refer'])) . '/');

    return $retvars;

  • comment2.inc.php

    pkwk_headers_sent();
    header('Location: ' . get_script_uri() . anchor_replace(rawurlencode($vars['refer'])) . '/');

    return $retvars;

  • pcomment.inc.php
    • pkwk_headers_sent();
      header('Location: ' . get_script_uri() . anchor_replace(rawurlencode($refer)) . '/');
      exit;

      ※恐らく、ディレクトリ偽装パッチにて対応された。 (自分では対応していない)

    • if (! isset($vars['msg']) || $vars['msg'] == '') {
      pkwk_headers_sent();
      header('Location: ' . get_script_uri() . anchor_replace(rawurlencode($vars['refer'])) . '/');
      return array(); }

      //if (! isset($vars['msg']) || $vars['msg'] == '') return array();
  • pcomment2.inc.php
    • pkwk_headers_sent();
      header('Location: ' . get_script_uri() . anchor_replace(rawurlencode($refer)) . '/');
      //header('Location: ' . get_script_uri() . '?' . rawurlencode($refer));
      exit;
    • if (! isset($vars['msg']) || $vars['msg'] == '') {
      pkwk_headers_sent();
      header('Location: ' . get_script_uri() . anchor_replace(rawurlencode($vars['refer'])) . '/');
      return array();
      }

      //if (! isset($vars['msg']) || $vars['msg'] == '') return array();
  • comment_kcaptcha.inc.php
    pkwk_headers_sent();
    header('Location: ' . get_script_uri() . anchor_replace(rawurlencode($vars['refer'])) . '/');

    // comment.inc.phpにバトンタッチ
    return plugin_comment_action();
     
  • comment2_kcaptcha.inc.php
    pkwk_headers_sent();
    header('Location: ' . get_script_uri() . anchor_replace(rawurlencode($vars['refer'])) . '/');

    return plugin_comment2_action();
     
  • pcomment_kcaptcha.inc.php
    なし
  • pcomment2_kcaptcha.inc.php
    なし

対応内容(認証文字入力エラー用)

エラーのときは、別途作成したエラーページに遷移するように修正しました。

  • ~~/error001 というエラーページを作成。
  • プラグインの修正
    • comment_kcaptcha.inc.php
    • comment2_kcaptcha.inc.php
    • pcomment_kcaptcha.inc.php
    • pcomment2_kcaptcha.inc.php

    において次のような修正を行いました。

    $temp_err = WRONG_WARNING ;
    $temp_err = eucjp2utf8($temp_err);
    pkwk_headers_sent(); header('Location: ' . get_script_uri() . 'error001' . '/');
    return array('msg'=>$temp_err);

    //return array('msg'=>WRONG_WARNING);

eucjp2utf8();については、文字化け対応の対応が前提です。

関連書籍



幽麗塔 1 (ビッグ コミックス)
著者: 乃木坂 太郎   出版年月: 2011-11-30  
定価: ¥ 550 (新品), ¥ 117 (中古)
サバンナ・ゲーム ~始動~
著者: 黒井 嵐輔   出版年月: 2011-11-17  
定価: ¥ 1,155 (新品), ¥ 776 (中古)
狐の悪魔と黒い魔導書 (1) (角川コミックス・エース 350-1)
著者: 橘 由宇   出版年月: 2011-10-23  
定価: ¥ 588 (新品), ¥ 174 (中古)
外天楼 (KCデラックス)
著者: 石黒 正数   出版年月: 2011-10-21  
定価: ¥ 735 (新品), ¥ 500 (中古)
昼も夜も、両手に悪女 (ガガガ文庫)
著者: 鳥村 居子   出版年月: 2011-10-18  
定価: ¥ 620 (新品), ¥ 97 (中古)
No votes yet

にほんブログ村 IT技術ブログへ人気ブログランキングへ