ユーザーが私の Web サイトで使用できるワークフローの例を次に示します。
コンテンツを含むタスクを作成します。コンテンツ
htmlentities
をエンコードしてデータベースに保存するために使用します (はい、エンコードされたコンテンツを保存することにしました)。ユーザーは後で戻ってきて、クリックしてタスクを表示します。問題は、コンテンツのプレビューが無効なテキストエリアで行われることです。
テキストエリアのコンテンツを印刷するときに使用しようとし
htmlentities_decode
ました(ユーザーが悪いものを入力した場合のXSSの問題);エンコードされたテキストを印刷するだけで、すべて問題ありません。
ユーザーがEDITをクリックすると、
textarea
編集可能になりますユーザーはSAVEをクリックします。
これが私の主な問題です。印刷する前にテキストをデコードしなかったため、テキストはまだエンコードされており、ユーザーが保存すると再エンコードされます。そのため、以前のコンテンツは二重にエンコードされています。
したがって、ユーザーが初めて次のようなものを入力した場合:
blablabla </textarea/> yeah!
次に、エンコードされ、結果は次のようになります。
blablabla </textarea/> yeah!
次に、それを表示すると、ユーザーが以前に入力したとおりに表示されますが、保存すると、結果は次のようになります。
blablabla &lt;/textarea/&gt; yeah!
そのため、彼が再度表示すると、うまく表示されません (また、ユーザーが自分のタスクを編集し続けると、データベース内のスペースがますます必要になります)。
まあ、これは多くの人が経験した問題だと思いますが、良い解決策が見つかりません。
ちなみに私はhtmlentities
一緒に使っていENT_QUOTES
ます。