D7フォームAPIを使用して、送信時にノードを作成するユーザー向けにいくつかのカスタムフォームを作成しています(node_submitおよびnode_save関数を使用)。これは私が使用しているフォームの例です:
function create_article_form($form, &$form_state) {
$form['node_title'] = array(
'#type' => 'textfield',
'#title' => t('Node Title'),
'#size' => 20,
'#required' => TRUE,
);
$form['submit_button'] = array(
'#type' => 'submit',
'#value' => t('Create Node'),
);
return $form;
}
これはうまくいきますが、私は消毒について疑問に思っています。私の調査から、check_plain()関数はセキュリティのためにテキストフィールドに使用する必要があるようです。ただし、生のHTMLエンティティも保存されます。
たとえば、次のように送信機能でノードのタイトルを設定しています。
$node->title = check_plain($form_state['values']['node_title']);
この問題は、ユーザーが次のようなものを入力した場合です。
Mike's Tacos
次のようにノードのタイトルに保存されます:
Mike's Tacos
したがって、そのタイトルを任意の場所(ビュー、カスタムノード、XX.tlp.phpなど)に出力すると、このように表示されます。
Check_plain(または最高のセキュリティを提供する関数)の使用方法を手伝ってくれる人はいませんが、人間が読める形式(Mike's Tacos)で値を保存できますか?
フィルターはoutputに使用され、入力には使用されません。これはDrupalの方法です。生の無害化されていないデータをストレージに保存し、レンダリング時にフィルター(およびキャッシュ)します。
ノードがレンダリングされているときにcore/contribによって同じ関数を介して実行されるため、保存する前にノードタイトルでcheck_plain()
を実行しないでください。 。
自分でノードタイトルをレンダリングする責任がある場合は、常に最初にcheck_plain()
を介して実行する必要があります。
echo check_plain($node->title);
しかし、常に出力ではあり、入力ではありません。