CodeIgniter 中内容排版与文本格式化需兼顾安全输出、语义保留与可控渲染:HTML 用 strip_tags+htmlspecialchars 或 HTMLPurifier 过滤;日期、金额、长文本分别用 date、number_format、word_limiter 标准化;Markdown 借 Parsedown 解析并二次过滤;全链路统一 utf8mb4 编码防乱码。

CodeIgniter 项目中处理内容排版与文本格式化,核心在于安全输出 + 语义保留 + 可控渲染。它不内置富文本编辑器或 Markdown 解析器,但提供了足够灵活的工具链来适配不同场景——从纯 HTML 内容过滤,到用户输入的轻量级格式转换,再到模板层的结构化渲染。
HTML 内容安全输出:避免 XSS,保留必要标签
用户提交的富文本(如后台编辑器生成的 HTML)不能直接 echo,必须清洗。CI 自带的 xss_clean() 已在 CI4 中弃用,推荐使用更可控的方式:
- 启用 PHP 的
htmlspecialchars()配合白名单过滤:对非信任来源内容,先用strip_tags($text, ['p', 'br', 'strong', 'em', 'ul', 'ol', 'li'])保留基础语义标签,再用htmlspecialchars()转义其余字符; - 若需完整富文本支持,集成第三方库如 HTMLPurifier,配置允许标签与属性(如
<a href>、<img src>),并在模型层统一处理; - 视图中输出时,明确区分“原始 HTML”与“纯文本”:用
<?php echo $content; ?>表示已清洗过的 HTML;用<?php echo esc($content); ?>(CI4 内置)或<?php echo htmlspecialchars($content); ?>(CI3)输出防 XSS 的转义文本。
日期/数字/金额等结构化文本标准化
用户输入或数据库读取的原始值常需格式化后展示,CI 提供了基础支持,但需结合 PHP 原生函数增强一致性:
- 日期统一转为
Y-m-d H:i:s存储,前端展示时用date('Y年m月d日 H:i', strtotime($row['created_at']))或 Carbon(如引入); - 金额避免用字符串拼接,改用
number_format($price, 2, '.', ','),并注意小数点与千分位符号适配本地化; - 长文本截断推荐用
word_limiter($text, 50)(CI 内置助手)而非substr(),防止截断 HTML 标签或中文乱码。
Markdown 或简易标记语法支持
若后台支持轻量标记(如 *斜体*、**粗体**、换行),不建议手写解析器。可选用:
-
erusev/parsedown:轻量、无依赖、兼容 CommonMark,一行即可解析:$html = (new Parsedown())->text($markdown);; - CI3 中可封装为自定义助手(
application/helpers/markdown_helper.php),CI4 中注册为服务或直接在控制器调用; - 注意:Markdown 输出仍需过 HTMLPurifier 或至少
strip_tags()白名单,防止嵌入 script 或 iframe。
多语言与特殊字符兼容处理
中文、emoji、全角符号在 CI 项目中易出乱码,关键在三处统一设置:
- 数据库连接配置中指定
charset为utf8mb4(CI3 在database.php加'char_set' => 'utf8mb4', 'dbcollat' => 'utf8mb4_unicode_ci'); - HTML 页面
<meta charset="UTF-8">不可少,且 PHP 文件本身保存为 UTF-8 无 BOM; - 用户提交表单时,若含 emoji,确保表单 enctype 为
multipart/form-data(上传场景)或普通 POST 下数据库字段类型为TEXT或MEDIUMTEXT,并启用utf8mb4支持。


















