特殊文字を HTML エンティティに変換しない
Rampart では、テンプレートを使用してデータを出力する際、
セットされたデータには自動的に hsc が適用され、
特殊文字が HTML エンティティに変換されます。
しかし、敢えて特殊文字をそのまま表示したい場合もあります。
そんなときに使用するメソッドが
setNoHsc, setNoHscFromArray です。
$ramp->setNoHsc(key, val);
$ramp->setNoHsc(key, val, length);
$ramp->setNoHscFromArray(array);
$ramp->setNoHscFromArray(array, key1, key2, key3...);
「このメソッドでセットされた変数の値には hsc を自動適用しない」
という点以外は、
set, setFromArray と使い方や機能などは同じです。
// 次の例では、
// "key" の値は HTML エンティティ変換され
// "<br />" が出力される。
// (つまり、改行タグではなく <br /> と表示される)
echo $ramp->set("key", "<br />");
echo $ramp->getHsc("key");
// 次の例では、
// "key" の値は HTML エンティティ変換されず
// "<br />" がそのまま出力される。
// (つまり、改行タグとして表示される)
echo $ramp->setNoHsc("key", "<br />");
echo $ramp->getHsc("key");
getHsc は本来 hsc を適用した値を返しますが、
setNoHsc 系メソッドを使用すると
「このメソッドでセットされた変数の値には hsc を自動適用しない」
と指定したことになるので、hsc は適用されず、
セットした値がそのまま返ります。
テンプレートを使用した出力でも同様に、
setNoHsc 系メソッでセットされたデータは
特殊文字がそのまま出力されます。
補足
次の例のように、手動で hsc を適用すれば、
当然ですが、HTMLエンティティ変換されます。
echo $ramp->setNoHsc("key", "<br />");
$val = $ramp->getHsc("key");
// $val は HTML エンティティ変換されず
// "<br />" のまま。
echo $ramp->hsc($val);
// $val は HTML エンティティ変換され、
// "<br />" が出力される。
// (つまり、改行タグではなく <br /> と表示される)