MySQLを使用してデータを保存し、WebページはすべてUTF-8としてエンコードされています。 ç
やõ
などのポルトガル語の文字がたくさんありますが、保存する前にHTMLエスケープする必要があるかどうか疑問に思っています。
たとえば、&
を&
として保存する必要がありますか?そして、なぜ(そうではない)?長所と短所/ベストプラクティスは何ですか?
保存する前に文字をHTMLエンコードしないでください。できるだけ純粋な形式のデータを保存する必要があります。 HTMLページにデータを表示するため、HTMLエンコードが必要です。そのため、ページを作成するためのデータの処理中にエンコードを実行します。たとえば、データをプレーンテキストの電子メールで送信することも決定したとします。データをHTMLエンコードした場合、HTMLエンコードは元に戻す必要のある障壁になります。
データの正規の形式を選択し、それを保存します。 UTF-8は素晴らしく、データベースはそれをサポートしています(すべてのテーブルを適切に作成したと仮定します)。 UTF-8を保存するだけです。
データベースの目的に沿って、データをHTMLエンコードして保存することはお勧めできません。そうすることで、データはHTMLページでのレンダリング(1つの目的)および他のすべての操作(多く)でのみ望ましいものになり、再度デコードする必要があります。これにより、データベースのデータの整合性(有効性、精度、使いやすさが妨げられるため)プロパティが低下します。
それらを検索する必要がありますか?私はMySQLの専門家ではありませんが、検索を行うにはフープを飛び越えなければならない場合があります。
データのHTML性や文字エンコードについて心配していますか?
回避できる場合は、DB内の文字の特別なエンコードを行わないようにしてください。検索、特別なインバウンド/アウトバウンド処理を覚えておく必要があるなど。
書き込みごとに数百または数千のページプレゼンテーションを行う場合は、途中でエンコードする方が効率的です。しかし、ほとんどの場合、違いはごくわずかだと思います。
しかし、他の理由(エンコードしない)は良いことです。間違いなく、UTF-8が好きな文字をエンコードするのは無意味です。
データベースに入る途中のエンコードは、実際にはセキュリティリスクであると私は主張します。これは、データベースとブラウザの間でエンコードを行わないことを意味するためです(これにより、二重エンコードが発生するため)。つまり、エンコードされていないデータがデータベースに入るルートが現在または将来ある場合、それはエンコードされていないブラウザに送信されます。データベースとブラウザ間でエンコードする方がよいため、エンコードされていないIMHOを保存します。
それを行うことに明確で明確な価値がない限り、私はそれをデータベースにエンコードしません。あなた(およびデータを操作する他の人)は、そのデータを使用するときにエスケープを解除するか、挿入、更新、またはそのフィールドと比較するデータをエスケープすることを忘れないでください。それを逃れることの利点が何であるかはわかりませんが、おそらくそれだけの価値はありません。