Zend_Service_ReCaptcha(日本語) 導入 Zend_Service_ReCaptchareCAPTCHA Web Service 用のクライアントです。reCAPTCHA のサイトによると、 "reCAPTCHA is a free CAPTCHA service that helps to digitize books (reCAPTCHA はフリーな CAPTCHA サービスで、 書籍の電子化を支援しています)" とのことです。 reCAPTCHA は、ユーザにふたつの単語を入力させます。 ひとつは実際の CAPTCHA で、もうひとつはスキャンされたテキスト (OCR ソフトウェアで認識できないもの) の単語です。 ユーザが最初の単語を正しく入力したら、 おそらく 2 番目の単語も正しく入力してくれるものとみなせます。 その入力内容を使って、OCR ソフトウェアの能力を向上させるわけです。 reCAPTCHA サービスを使用するには、アカウントのサインアップ が必要です。また公開鍵と秘密鍵を作成するには、 サービスを使用するドメインを登録しなければなりません。 単純な使用法 Zend_Service_ReCaptcha オブジェクトのインスタンスを作成し、 公開鍵と秘密鍵を渡します。 reCAPTCHA サービスのインスタンスの作成 reCAPTCHA をレンダリングするには、 getHTML() メソッドをコールするだけです。 reCAPTCHA の表示 getHTML(); ]]> フォームから送信されてきた内容のうち、 'recaptcha_challenge_field' と 'recaptcha_response_field' のふたつのフィールドの内容を受け取らなければなりません。 これらを、reCAPTCHA オブジェクトの verify() メソッドに渡します。 フォームフィールドの検証 verify( $_POST['recaptcha_challenge_field'], $_POST['recaptcha_response_field'] ); ]]> 結果が得られたら、正しいものだったかどうかを確認します。結果は Zend_Service_ReCaptcha_Response オブジェクトとなり、 このオブジェクトは isValid() メソッドを提供しています。 reCAPTCHA の検証 isValid()) { // 検証に失敗 } ]]> reCAPTCHA Zend_Captcha アダプタを使うか、そのアダプタを CAPTCHA フォーム要素 のバックエンドとして使うことがもっと簡単です。 どちらの場合でも、reCAPTCHA のレンダリングや検証は自動化されます。 メールアドレスの隠蔽 Zend_Service_ReCaptcha_MailHide を使うと、 メールアドレスを隠蔽できます。メールアドレスの一部分を、 reCAPTCHA チャレンジのポップアップウィンドウに置き換えます。 チャレンジを解決すると、完全なメールアドレスがあらわれるというわけです。 このコンポーネントを使うには、 mailhide API 用の公開キーと秘密キーを生成するための アカウント が必要です。 mail hide コンポーネントの使用法 setPublicKey($pubKey); $mailHide->setPrivateKey($privKey); $mailHide->setEmail($mail); // 表示します print($mailHide); ]]> 上の例の表示は "m...@example.com" のようになり、 "..." のリンクは reCAPTCHA チャレンジのポップアップウィンドウを表示します。 公開キーと秘密キーそしてメールアドレスは、クラスのコンストラクタで指定することもできます。 4 番目の引数も存在し、ここでコンポーネントのオプションを設定できます。 使用できるオプションは次の表のとおりです。 Zend_Service_ReCaptcha_MailHide のオプション オプション 説明 期待する値 デフォルト値 linkTitle リンクの title 属性 文字列 'Reveal this e-mail address' linkHiddenText ポップアップリンクを含める文字列 文字列 '...' popupWidth ポップアップウィンドウの幅 int 500 popupHeight ポップアップウィンドウの高さ int 300
オプションの設定は、コンストラクタの 4 番目の引数で指定する以外にも setOptions($options) メソッドで行うこともできます。 このメソッドには、連想配列あるいは Zend_Config のインスタンスを渡します。 多数の隠しメールアドレスの作成 setPublicKey($pubKey); $mailHide->setPrivateKey($privKey); $mailHide->setOptions(array( 'linkTitle' => 'Click me', 'linkHiddenText' => '+++++', )); // 隠したいメールアドレス $mailAddresses = array( 'mail@example.com', 'johndoe@example.com', 'janedoe@example.com', ); foreach ($mailAddresses as $mail) { $mailHide->setEmail($mail); print($mailHide); } ]]>