PHPフレームワーク Ethna アクションフォームについて


LLフレームワークBOOKS「Ethna×PHP」をやっています。
アクションフォームのメソッドのところで質問です。

以下のように記載があります。

1、フォーム値($form):もともと送信されてきたフォーム値をエスケープした値
2、エスケープ付きコンテナ($app):アクションなどで与えられた値をエスケープした値
3、エスケープなしコンテナ($app_ne):エスケープされずにそのままの値

まず、ここで言うエスケープとはクロスサイトスクリプティング防止のあれですよね?

それで1と2の違いがよくわかりません。
「アクションなどで与えられた値」と、「もともと送信されてきたフォーム値」の違いがよくわかりません。
だれか教えて頂けませんか?

何かいい例文などもありましたら紹介して頂けると助かります。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/05/15 12:15:04

回答1件)

id:sotarok No.1

回答回数1ベストアンサー獲得回数0

1. もともと送信されてきたフォーム値

これは、 http://example.com/?name=aoi などの GET パラメータや、

タグの などの POST の値を指していて、
http://example.com/?name=aoi などに対して、ActionForm で
$form => array(
    'name' => array(
       'type' => VAR_TYPE_STRING,
        ....
    ),
),

などと定義すれば、テンプレートで

{$form.name}

でとれます。


2. アクションなどで与えられた値

で、こっちは、ActionClass 内で、 $this->af->setApp() メソッドを用いて自分でセットした値のことです。

例えば、

public function perform()
{
    // ...
    $this->af->setApp('url', 'http://www.aoimiyazaki.jp/');
    // ...
}

などとセットすると、テンプレートで

{$app.url}

で参照することができます。

で、ちなみに「エスケープされた値」は、まぁ、XSS対策などの対策で、という認識はほぼ合っていますが、要するに htmlspecialchars がかかった値のことです。
例えば、ブログアプリの本文などに HTML を許容している場合、ActionClass/ViewClassで setApp() を使ってしまうとテンプレートで出力するときに HTML がエスケープされてしまいますが、setAppNe() を使えばエスケープされず、HTML をそのまま出力することができる、みたいな用途で使います。

id:taityou3

ありがとうございます。少しわかってきました。

2012/05/09 01:44:56

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません