私はいつもURL/HTMLエンコーディング/エスケープと混同されてきました。私はPHPを使用しているので、何かを片付けたいと思います。
私はいつも使うべきだと言えますか
urlencode
:個々のクエリ文字列部分用
$url = 'http://test.com?param1=' . urlencode('some data') . '¶m2=' . urlencode('something else');
htmlentities
:<>
のような特殊文字をエスケープして、ブラウザによって適切にレンダリングされるようにします
それぞれの機能を使う場所は他にありますか?私はこれらの逃げるものすべてが得意ではなく、常に彼らに混乱しています
まず、99%の確率でhtmlentites
を使用するべきではありません。代わりに、xml/htmlドキュメント内で使用するテキストをエスケープするには htmlspecialchars()
を使用する必要があります。 htmlentities
は、使用しているネイティブ文字セットでは表示できない文字を表示する場合にのみ役立ちます(ページがASCIIであるが、表示したいUTF-8文字がある場合に役立ちます)。代わりに、ページ全体をUTF-8にして(難しくはありません)、それで完了します。
urlencode
までは、頭に釘を打ちます。
要約すると、次のようになります。
HTMLの内部:
<b><?php echo htmlspecialchars($string, ENT_QUOTES, "UTF-8"); ?></b>
URLの内部:
$url = '?foo='.urlencode('bar');
そうです。 --htmlspecialchars
は問題ありませんが、文字セットをまっすぐに取得する限りは問題ありません。とにかくどちらをすべきか。だから私はそれを使う傾向があるので、私がそれを台無しにしたかどうかを早く知るでしょう。
また、URLをhtmlコンテキスト(たとえば、href
-タグのa
内)に配置する場合は、それをエスケープする必要があることに注意してください。したがって、次のようなものがよく見られます。
echo "<a href='" . htmlspecialchars("?foo=".urlencode($foo)) . "'>clicky</a>"