次の2つのhtml/phpスニペットがあるとします。
<input type="text" name="firstname" value="<?php echo $_POST['firstname']; ?>" />
そして
<textarea name="content"><?php echo $_POST['content']; ?></textarea>
エコーされた$_POST
変数に使用する必要がある文字エンコードは何ですか?組み込みのPHP関数を使用できますか?$_POST
値はまだエンコードされていないと想定してください。魔法の引用符は何もありません。
htmlspecialchars($_POST['firstname'])
およびhtmlspecialchars($_POST['content'])
を使用します。
ユーザーに表示する前に、常に文字列を htmlspecialchars()
でエスケープします。
htmlspecialchars は両方の場合に機能します。 input
の場合に引用符が問題になるのを避けるために、さまざまなフラグオプションを確認してください。
それはちょっと長いので、関数に入れます
<?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>