web-dev-qa-db-ja.com

PHPでHTMLフォームの入力デフォルト値を適切にエスケープする方法は?

次の2つのhtml/phpスニペットがあるとします。

<input type="text" name="firstname" value="<?php echo $_POST['firstname']; ?>" />

そして

<textarea name="content"><?php echo $_POST['content']; ?></textarea>

エコーされた$_POST変数に使用する必要がある文字エンコードは何ですか?組み込みのPHP関数を使用できますか?$_POST値はまだエンコードされていないと想定してください。魔法の引用符は何もありません。

61
Ryan

htmlspecialchars($_POST['firstname'])およびhtmlspecialchars($_POST['content'])を使用します。

ユーザーに表示する前に、常に文字列を htmlspecialchars() でエスケープします。

92
rid

htmlspecialchars は両方の場合に機能します。 inputの場合に引用符が問題になるのを避けるために、さまざまなフラグオプションを確認してください。

4
Niklas

それはちょっと長いので、関数に入れます

<?PHP
function encodeValue ($s) {
    return htmlentities($s, ENT_COMPAT|ENT_QUOTES,'ISO-8859-1', true); 
}
?>

これにはENT_QUOTESがあり、一重引用符と二重引用符が確実にエンコードされますが、空の文字列を挿入する代わりに特殊文字をエンコード(Joséのように)になります。

その後、次のことができます。

<input type="text" name="firstname" value="<?= encodeValue($_POST['firstname']) ?>" />

そして

<textarea name="content"><?= encodeValue($_POST['content']) ?></textarea>
1
Eric