ThinkPHP の conf ファイルの Convention.php には構成オプションがあります
'DEFAULT_FILTER' => 'htmlspecialchars', // I 関数のデフォルトのパラメーター フィルター方法...
このメソッドはデフォルトで有効になっています。つまり、データベースに保存したデータは htmlspecialchars 関数によってエスケープされます。
私はプロジェクトで Kindeditor リッチ テキスト エディターを使用しています (Ueditorckeditor を使用している可能性があります)。記事のコンテンツをリッチ テキスト エディターで編集してデータベースに保存し、データベースから読み取って表示します。ウェブページ。
この過程で、データベースに送信するテキストデータをinsertメソッドで直接表示すると正常にHTMLページに解析できるのですが、データベースからHTMLデータを読み込むと、記事のコンテンツは HTML コード全体になります。ダンプには、読み取った配列の内容が出力されます。内容がエスケープされていることがはっきりとわかります。
1. データベースに保存されているコンテンツと記事のコンテンツの例:
2. HTML ページで解析されたコンテンツ効果:
明らかに、HTML タグに変換されるべきコンテンツがテキスト内のコンテンツに解析され、テキスト コンテンツの最も外側の部分に二重引用符が追加されていることがわかります。
通常の表示では二重引用符は不要です。データベースから読み取られたデータは HTML ページのソース コードであり、HTML ページに挿入された後、タグが解釈され、タグ内のコンテンツがページとして表示されます。
上記の分析により、ThinkPHP はコンテンツの保存処理中に自動的にコンテンツをエスケープし、データベースに保存されたコンテンツが再度読み出されるときにエスケープされたコンテンツになることが判明しました。本文のラベルに属します。
そこで、思い切って TP の conf ディレクトリに移動して、convention.php 設定ファイルを見つけ、DEFAULT_FILTER 関数を無効にして、将来使用する必要があるときに手動で呼び出します。
再度テストすると、今度は問題が解決されました。