質問: **データベースへ、どういう形式のデータを保存すべきか分からないので教えてください** * 不特定多数が入力するフォームに、「マークダウンエディタ」もしくは「BBCodeエディタ」を付けたいと考えています * この時、データベースへはどういう形式のデータを保存するのでしょうか? --- * エディタで制限しているので、生HTMLをそのまま格納しても良い? * それとも、変換された「マークダウンコード」なり「BBCode」の方を保存するのでしょうか? * あるいは、どちらでも良い? * それぞれメリットデメリットがあれば教えてください
回答: MarkdownやBBCodeのソースを後で編集する必要があるのであれば、ソースを保存しておかなければなりません。 表示の際に毎回HTMLへのコンバータを通す必要がありますので、アプリケーションによってはパフォーマンスが問題になるでしょう。また、ライブラリを更新したなどでコンバータの挙動が変わると出力結果が変わる場合があります。これは非常に気づきにくいトラブルになります。 ソースを事後に編集する必要が無いのであれば、変換後のHTMLを保存しても良いでしょう。これなら上記のような問題が起きる余地がありません。 アプリケーションの要件次第では、変換前後のデータを両方保存し、事後の編集には返還前のソースを利用、表示には変換後のデータを利用するよう検討しても良いかもしれません。 ところで。 > > エディタで制限しているので、生HTMLをそのまま格納しても良い? > > > データベースに保存する際にはいわゆる文字化けやエスケープ文字の扱いに起因する問題、SQLインジェクションなどが起きないよう配慮する必要がありますがそれは元のデータがテキストである限りHTMLであろうとMarkdownであろうと全く同じです。 HTMLを表示する際に生じる問題(HTML構造の崩壊、不正なスクリプトの挿入、XSS等)を防ぐためのフォーマットの確認やタグの除去などは、入力から表示までのサイクルの中でどこかで確実にやる必要がありますが、データベースにどのように保存するかとは直接関係ありません。 ここを誤解していると誤ったエスケープ(SQLとしてのエスケープをするべきなのにHTMLとしてのエスケープをしてしまう、など)をしてしまうことになります。