2011-10-18 8 views
0

私の理解では、すべての変数はビュー内でhtmlspecialchars()を通して出力する必要があります。htmlspecialchars - より良い方法が必要です

これを行う方法や方法はありますか?各ビューの適切な行に機能を指定する必要はありませんか? 関数html_escape($のVAR)

function h($var) 
{ 
    if (is_array($var)) 
    { 
    return array_map('h', $var); 
    } 
    else 
    { 
    return htmlspecialchars($var, ENT_QUOTES, 'UTF8'); 
    } 
} 

しかし、まだ...これは非常に退屈な得ることができる:

私が思い付くことができることを最高のは、次のようにヘルパー関数を持つことです!

アイデア?

+0

htmlspecialcharsはすべての変数出力に使用する必要がありますか? – imm

+4

これは、PHPテンプレートエンジンが存在する理由の1つです。いくつかの情報については、[このチュートリアル](http://coding.smashingmagazine.com/2011/10/17/getting-started-with-php-templating/)をチェックしてください。 –

+0

@immまあ、ユーザーが提供する変数ごとに言いたいのですが、 – JonoB

答えて

2

h()は、エスケープされたデータを返すのではなく出力することがあります。したがって、<?php echo h($myvar); ?>の代わりに<?php h($myvar); ?>と書くことができます。これはエンティティに変換せずに変数をエコーするよりも2文字短くなりました。

1

それはすでにルール・セットの任意のコードの混入を防止するために対するフィルタされていないではないすべての変数がにhtmlentities /はhtmlspecialcharsを介して実行されなければならないことに注意することが重要な区別、とにかくでユーザー提供のコンテンツが含まれているものだけ、です。

入力時に入力を少し減らしたり、コントローラでhtmlentities/htmlspecialcharsを使用して入力したすべての入力をループしてビューに渡したりするヘルパ関数を作成できます(ただし、これは効率が悪い

0

あなたが持っているものは、おそらく最も多くの状況で簡単に脱出するためのものです。

個人的に私は私が私のHTML出力内の任意の$_GET変数を使用するつもりだ知っていれば、私はこれを実行して、私の変数にはほとんどループを使用します。

<?php 
foreach($_GET as $key => $value) { 
    $_GET[$key] = htmlspecialchars($value); 
} 
?> 

次に、右側の後、私のhtmlタグを開始。

ユーザーが影響を与えない限り、すべてをエスケープする必要はありません。また

は、HTMLで使用する前に、あなたのスクリプトでinclude('escape.php')そして、その上でそれを$ _GET、$ _POSTのようなあなたが使用する一般的な変数に上記の方法を使用していますescape.phpと呼ばれるスクリプト、$ _COOKIEを持っているし、可能性出力。

あなたの趣味やあなたのプロジェクトに必要なものは、それだけで変わりません。

関連する問題