web-dev-qa-db-ja.com

データベースに格納する前に、特殊文字をHTMLエンコードする必要がありますか?

MySQLを使用してデータを保存し、WebページはすべてUTF-8としてエンコードされています。 çõなどのポルトガル語の文字がたくさんありますが、保存する前にHTMLエスケープする必要があるかどうか疑問に思っています。

たとえば、&&として保存する必要がありますか?そして、なぜ(そうではない)?長所と短所/ベストプラクティスは何ですか?

29
Mohamad

保存する前に文字をHTMLエンコードしないでください。できるだけ純粋な形式のデータを保存する必要があります。 HTMLページにデータを表示するため、HTMLエンコードが必要です。そのため、ページを作成するためのデータの処理中にエンコードを実行します。たとえば、データをプレーンテキストの電子メールで送信することも決定したとします。データをHTMLエンコードした場合、HTMLエンコードは元に戻す必要のある障壁になります。

データの正規の形式を選択し、それを保存します。 UTF-8は素晴らしく、データベースはそれをサポートしています(すべてのテーブルを適切に作成したと仮定します)。 UTF-8を保存するだけです。

51
Ned Batchelder

データベースの目的に沿って、データをHTMLエンコードして保存することはお勧めできません。そうすることで、データはHTMLページでのレンダリング(1つの目的)および他のすべての操作(多く)でのみ望ましいものになり、再度デコードする必要があります。これにより、データベースのデータの整合性(有効性、精度、使いやすさが妨げられるため)プロパティが低下します。

7
BraveNinja

それらを検索する必要がありますか?私はMySQLの専門家ではありませんが、検索を行うにはフープを飛び越えなければならない場合があります。

データのHTML性や文字エンコードについて心配していますか?

回避できる場合は、DB内の文字の特別なエンコードを行わないようにしてください。検索、特別なインバウンド/アウトバウンド処理を覚えておく必要があるなど。

2
n8wrl

書き込みごとに数百または数千のページプレゼンテーションを行う場合は、途中でエンコードする方が効率的です。しかし、ほとんどの場合、違いはごくわずかだと思います。

しかし、他の理由(エンコードしない)は良いことです。間違いなく、UTF-8が好きな文字をエンコードするのは無意味です。

2
hawkip

データベースに入る途中のエンコードは、実際にはセキュリティリスクであると私は主張します。これは、データベースとブラウザの間でエンコードを行わないことを意味するためです(これにより、二重エンコードが発生するため)。つまり、エンコードされていないデータがデータベースに入るルートが現在または将来ある場合、それはエンコードされていないブラウザに送信されます。データベースとブラウザ間でエンコードする方がよいため、エンコードされていないIMHOを保存します。

2
Dai

それを行うことに明確で明確な価値がない限り、私はそれをデータベースにエンコードしません。あなた(およびデータを操作する他の人)は、そのデータを使用するときにエスケープを解除するか、挿入、更新、またはそのフィールドと比較するデータをエスケープすることを忘れないでください。それを逃れることの利点が何であるかはわかりませんが、おそらくそれだけの価値はありません。

1