2

1、2週間前、私はZend Frameworkを真剣に使い始めたばかりで、Zend_View :: escape()を使用して手動でエスケープするのに問題がありました。$ this-> escape()を使用せずに、テンプレート(Zend_Viewテンプレート)の変数を自動的にエスケープする方法や、出力バッファリングや*.phtmlファイルのPREG置換などの他のトリッキーな方法を知っている人はいますか。

この場合のベストプラクティスを知りたいのですが。

4

5 に答える 5

2

PiKe プロジェクトでは、すべてのビュー変数を自動的にエスケープするカスタム ストリーム ラッパーを作成しましたが、パフォーマンス ヒットは最小限に抑えられています。次の方法で RAW 値を取得できます。

<?=~ $variable ?>

「~」の文字に注目してください。チェックアウトhttp://code.google.com/p/php-pike/wiki/Pike_View_Stream

「出力バッファリングや PREG による *.phtml ファイルの置き換えなどのトリッキーな方法」を避けたいとおっしゃっていたことは承知していますが、Zend Framework 1 で自動エスケープを修正するのは非常に巧妙な方法だと思います。

于 2011-09-16T08:13:27.877 に答える
2

Zend_View を拡張して、自動エスケープするカスタム ビュー クラスを作成するか、ビュー ヘルパーを使用して自動エスケープのオン/オフを切り替えることができます。

私はそれについてブログ投稿を書き、両方のアプローチのコード例を示しました: Zend_View でテンプレート変数を自動的にエスケープする方法

于 2010-07-05T21:38:47.510 に答える
0

あなたはベストプラクティスを求めてきましたが、あなたがしていることはすでにそれです。データを表示するときまで待ってから、出力上の理由でのみデータを変更してください。

毎回書く->escape()は退屈だと思いますが、それでもまだ道のりです。

すべてを自動エスケープする場所を指定すると、ある日、エスケープされていないデータが必要なときに問題が発生します。

于 2010-07-05T21:21:07.400 に答える
0

ZendX_View_Autoescaping、このプロジェクトは、割り当てられたすべてのビュー変数の自動エスケープを備えた ViewRenderer を提供します。

https://github.com/jensklose/ZendX_View_Autoescaping

それを試してみてください!

以下をサポートします。

  • 深いデータ構造へのエスケープ
  • 配列キーのエスケープ
  • エスケープ コンテキストを切り替える可能性 (html、json、nofilter)
于 2012-02-01T18:18:53.703 に答える
0

あなたは「自動的に」と言ったので、echo $this->var; を実行するときを意味すると思います。あなたはそれをエスケープしたい。その場合は、変数がビューに設定されているときにエスケープを行うことができます。知る限り、それは Zend_View_Abstract クラスの __set マジック メソッド* (300 行目あたり) で行われます。コア ZF コードの変更は推奨されないため、Z_V_A または Z_V を拡張して __set メソッドをオーバーライドすることができます。

* Z_V_A::__set がパラメータがビューに割り当てられる唯一の場所であると 100% 確信しているわけではありませんが、そうあるべきだと思います。そのための他の場所は考えられません。

編集: 個人的には、私はこれを避けて、古き良き $this->escape() に固執します。タイピングは増えますが、バックグラウンドで行われる魔法は減ります。

于 2010-07-05T19:26:15.317 に答える