使用 KindEditor / UEditor / CKEditor 等富文本編輯器儲存文章,資料庫存入時正常,但讀出顯示時,HTML 標籤變成實體字元 (如 <p> 顯示為 <p>),頁面出現原始碼而非渲染結果。
ThinkPHP Conf/Convention.php 預設開啟:
'DEFAULT_FILTER' => 'htmlspecialchars', // 所有 I() 輸入自動經過 htmlspecialchars
導致富文本內容在寫入資料庫前被轉義,讀出時又被瀏覽器當作純文字顯示。
修改 Conf/Convention.php 或專案 Conf/config.php:
'DEFAULT_FILTER' => '', // 關閉自動過濾
需要時手動呼叫:I('post.content', '', 'htmlspecialchars')。
在模型 _filter 屬性排除:
class ArticleModel extends Model {
protected $_filter = ['content' => '']; // content 欄位不自動過濾
}
$data = I('post.');
$data['content'] = htmlspecialchars_decode($data['content']); // 還原
$model->add($data);
{$vo.content|htmlspecialchars} 或模板引擎預設輸出轉義。HTMLPurifier 做白名單過濾,防止 XSS。修改設定後重新測試:編輯器輸入帶圖片、樣式的內容 → 送出 → 列表頁正常渲染 HTML,不再出現實體字元。