Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
Laravel开发:解决HTMLPurifier移除HTML id 属性的问题_创想鸟

Laravel开发:解决HTMLPurifier移除HTML id 属性的问题

Laravel开发:解决HTMLPurifier移除HTML id 属性的问题

本教程旨在解决laravel应用中,htmlpurifier在处理html内容时自动移除html `id` 属性的问题。文章将揭示该行为的根源,并提供明确的配置指南,演示如何通过设置`attr.enableid`参数,确保html内容的`id`属性在数据处理和存储过程中得以完整保留,从而维护前端交互和样式的正确性。适用于在cms等场景中需要精确控制html结构的开发者。

问题背景与现象

在开发基于Laravel的内容管理系统(CMS)或任何涉及用户提交富文本内容的应用程序时,开发者可能会遇到一个常见且令人困惑的现象:尽管前端富文本编辑器(如TinyMCE)能够正确生成并发送带有id属性的HTML内容,但在数据保存至数据库后,这些id属性却神秘地从HTML标签中消失了。

例如,用户通过编辑器提交的HTML可能包含一个带有id属性的div标签:

这是一段包含ID属性的文本。

然而,当这段内容经过Laravel应用的处理并最终存储在数据库中,然后再次取出时,id属性却被移除了:

这是一段包含ID属性的文本。

通过调试请求数据 (dd($request)) 可以确认,id属性在请求到达控制器时是完整无缺的。这表明问题并非出在前端提交或请求传输环节,而是发生在后端数据处理的某个阶段。

立即学习“前端免费学习笔记(深入)”;

问题根源:HTMLPurifier的默认行为

深入排查后,我们发现问题的核心在于HTMLPurifier库。HTMLPurifier是一个功能强大的HTML过滤库,其主要目的是通过严格的白名单机制来清理和净化用户提交的HTML内容,以有效防止跨站脚本攻击(XSS)等多种安全漏洞。它的设计哲学是“安全优先”,这意味着任何可能带来安全风险或未被明确允许的HTML标签或属性,都会在默认情况下被移除。

尽管id属性在大多数情况下是无害的,但在极致安全的考量下,HTMLPurifier的默认配置可能将其视为潜在的风险点或非标准行为,因此将其移除。这正是导致HTML内容中id属性丢失的根本原因。

在示例控制器代码中,HTMLPurifier被实例化并用于净化用户输入:

$purifier = new HTMLPurifier();// ...$inputContentValue[$keyName] = $purifier->purify($input);

这里的关键在于new HTMLPurifier(),它使用了HTMLPurifier的默认配置。而默认配置并未明确启用id属性的保留,从而导致了该属性在净化过程中被剥离。

解决方案:配置HTMLPurifier以保留id属性

要解决id属性被移除的问题,我们需要明确地告知HTMLPurifier允许并保留id属性。这可以通过创建一个自定义的HTMLPurifier配置对象来实现。

Kive Kive

一站式AI图像生成和管理平台

Kive 171 查看详情 Kive

HTMLPurifier通过HTMLPurifier_Config类来管理其各项配置。要启用id属性的保留,我们需要将Attr.EnableID参数设置为true。

以下是具体的解决方案代码:

use HTMLPurifier_Config; // 确保在文件顶部引入该类use HTMLPurifier;       // 确保在文件顶部引入该类// 创建HTMLPurifier配置对象,基于默认配置$config = HTMLPurifier_Config::createDefault();// 启用ID属性的保留$config->set('Attr.EnableID', true);// 使用自定义配置实例化HTMLPurifier$purifier = new HTMLPurifier($config);// 现在,使用这个配置后的purifier来净化HTML内容$inputContentValue[$keyName] = $purifier->purify($input);

将解决方案集成到Laravel控制器

根据上述解决方案,我们可以修改原有的Laravel控制器代码,使其能够正确保留HTML内容的id属性。

except('_token', 'image_input', 'key', 'status', 'type');        $inputContentValue = [];        // 配置HTMLPurifier以保留ID属性        $config = HTMLPurifier_Config::createDefault();        $config->set('Attr.EnableID', true);        $purifier = new HTMLPurifier($config); // 使用引入的类名实例化        foreach ($valInputs as $keyName => $input) {            if (gettype($input) == 'array') {                $inputContentValue[$keyName] = $input;                continue;            }            // 使用配置后的purifier进行净化            $inputContentValue[$keyName] = $purifier->purify($input);        }        // ... 后续逻辑,如图片上传、模型查找或创建等 ...        if ($request->id) {            $content = Frontend::findOrFail($request->id);        } else {            $content = Frontend::where('data_keys', $key . '.' . $request->type)->first();            if (!$content || $request->type == 'element') {                $content = Frontend::create(['data_keys' => $key . '.' . $request->type]);            }        }        // ... 其他内容处理,例如图片上传逻辑 ...        // 更新模型数据        $content->update(['data_values' => $inputContentValue]);        $notify[] = ['success', 'Content has been updated.'];        return back()->withNotify($notify);    }}

通过上述修改,当HTMLPurifier处理$input内容时,它将遵循新的配置,从而正确保留所有有效的id属性,确保HTML内容的完整性。

注意事项与最佳实践

安全性考量: 启用Attr.EnableID会允许HTMLPurifier保留id属性。虽然id属性本身通常不构成直接的XSS威胁,但它可能与其他前端脚本结合使用,从而在特定场景下产生安全隐患。HTMLPurifier的核心价值在于其严格的白名单机制,即使启用了id属性,它仍然会过滤掉其他不安全的标签和属性。在使用HTMLPurifier时,开发者应始终权衡功能需求与潜在的安全风险。

全局配置与重用: 如果你的应用在多个地方使用HTMLPurifier,并且都需要保留id属性,建议将HTMLPurifier的配置和实例化过程抽象为一个可重用的服务提供者(Service Provider)或辅助函数。这样可以避免在每个控制器中重复相同的配置代码,提高代码的可维护性和一致性。

示例 (使用服务提供者):首先,创建一个服务提供者(例如 app/Providers/HtmlPurifierServiceProvider.php):

app->singleton(HTMLPurifier::class, function ($app) {            $config = HTMLPurifier_Config::createDefault();            $config->set('Attr.EnableID', true);            // 你可以根据需要添加其他全局配置,例如允许特定的HTML标签            // $config->set('HTML.Allowed', 'p,b,a[href],i,strong,em,ul,ol,li');            return new HTMLPurifier($config);        });    }    public function boot()    {        //    }}

然后,在config/app.php文件的providers数组中注册这个Service Provider:

// config/app.php'providers' => [    // ...    AppProvidersHtmlPurifierServiceProvider::class,],

在控制器中,你可以通过依赖注入的方式获取HTMLPurifier实例:

purifier = $purifier;    }    public function frontendContent(Request $request, $key)    {        // ...        foreach ($valInputs as $keyName => $input) {            if (gettype($input) == 'array') {                $inputContentValue[$keyName] = $input;                continue;            }            // 使用注入的purifier实例进行净化            $inputContentValue[$keyName] = $this->purifier->purify($input);        }        // ...    }}

其他属性或标签的保留: 如果除了id属性,你还需要保留其他特定的HTML属性(如class、style)或标签(如iframe

以上就是Laravel开发:解决HTMLPurifier移除HTML id 属性的问题的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/863888.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Spring Boot 2.7: 简化控制器 JSON 交互配置的最佳实践
上一篇 2025年11月28日 01:07:13
JavaScript微前端_模块联邦与应用隔离
下一篇 2025年11月28日 01:07:20

相关推荐

  • vivo浏览器网页版入口 vivo浏览器官方网页版入口

    vivo浏览器网页版入口 vivo浏览器官方网页版入口vivo浏览器网页版入口 vivo浏览器官方网页版入口vivo浏览器网页版入口 vivo浏览器官方网页版入口vivo浏览器网页版入口 vivo浏览器官方网页版入口

    vivo浏览器网页版入口在vivo官网(https://www.vivo.com.cn/),用户可在此下载适配的安装包,进入后可进行字体调节、开启夜间模式、查看已缓存视频及设置广告拦截。 vivo浏览器网页版入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来vivo浏览器官方网页版入口,…

    2026年9月30日 • 用户投稿
    000
  • 输入数值范围校验:Java实现用户输入在30到70之间的程序

    输入数值范围校验:Java实现用户输入在30到70之间的程序输入数值范围校验:Java实现用户输入在30到70之间的程序输入数值范围校验:Java实现用户输入在30到70之间的程序输入数值范围校验:Java实现用户输入在30到70之间的程序

    本文将指导你如何编写一个Java程序,该程序接收用户输入的整数,并验证该整数是否在30到70的范围内。如果输入超出范围,程序将提示用户重新输入,直到输入有效为止。文章将详细讲解代码实现,并提供注意事项,帮助你理解循环控制和输入处理的关键点。 实现用户输入范围校验的Java程序 本教程将引导你完成一个…

    2026年9月30日 • 用户投稿
    100
  • sublime如何安装插件提升开发效率 sublime插件安装与管理的详细指南

    sublime如何安装插件提升开发效率 sublime插件安装与管理的详细指南sublime如何安装插件提升开发效率 sublime插件安装与管理的详细指南sublime如何安装插件提升开发效率 sublime插件安装与管理的详细指南sublime如何安装插件提升开发效率 sublime插件安装与管理的详细指南

    安装package control是提升sublime text开发效率的第一步,需通过控制台粘贴官方对应版本的安装代码完成;2. 安装插件时使用ctrl+shift+p调出命令面板,输入package control: install package进行搜索和安装,如emmet用于html/css…

    2026年9月30日 • 用户投稿
    900
  • ​Luma AI 发布 Ray3:首款支持 HDR 视频生成的创新模型

    ​Luma AI 发布 Ray3:首款支持 HDR 视频生成的创新模型​Luma AI 发布 Ray3:首款支持 HDR 视频生成的创新模型​Luma AI 发布 Ray3:首款支持 HDR 视频生成的创新模型​Luma AI 发布 Ray3:首款支持 HDR 视频生成的创新模型

    Luma AI 近日发布了全新的视频生成模型 Ray3,宣称这是业界首个能够生成专业级 HDR(高动态范围)视频的AI模型。该模型支持10位、12位乃至16位色深,并可输出EXR格式文件,便于直接融入专业的后期制作、调色及视觉特效流程。同时,Ray3还具备将普通SDR视频内容转换为HDR的能力,为创…

    2026年9月30日 • 用户投稿
    000
  • php 换行符问题

    php 换行符问题php 换行符问题php 换行符问题php 换行符问题

    处理php换行符问题的背景 公司的一个业务要求用户上传CSV文件,这些文件内的数据是以逗号(,)分隔的,每一行表示一条数据。业务代码会读取这些数据,并根据特定的业务规则将其入库。然而,有用户反馈说,尽管他们上传的CSV文件符合规范,但上传后系统提示数据为空。 问题定位 在拿到用户的CSV文件后,我们…

    2026年9月30日 • 用户投稿
    000
  • DedeCms错误警告页面

    DedeCms错误警告页面DedeCms错误警告页面DedeCms错误警告页面DedeCms错误警告页面

    页面出现异常:/ 错误提示:数据库连接失败,可能是由于数据库密码不正确或数据库服务端发生故障,请核查相关配置后重新尝试。 1、 利用FlashFXP等FTP工具建立站点连接 2、 进入网站主目录,在 htdocs-data 文件夹中定位到 common.inc.php 文件,并将其下载至本地计算机。…

    2026年9月30日 • 用户投稿
    900
  • 手机怎么看AO3中文版_AO3移动端网页版访问指南

    手机怎么看AO3中文版_AO3移动端网页版访问指南手机怎么看AO3中文版_AO3移动端网页版访问指南手机怎么看AO3中文版_AO3移动端网页版访问指南手机怎么看AO3中文版_AO3移动端网页版访问指南

    首先在手机浏览器输入ao3官网地址访问,页面会自动适配移动端;接着点击右上角“Language”选择“中文(简体)”切换语言;最后可通过添加主屏幕快捷方式、开启深色模式、调整字体大小等方式优化阅读体验。 手机怎么看ao3中文版?这是不少网友都关注的,接下来由php小编为大家带来ao3移动端网页版访问…

    2026年9月30日 • 用户投稿
    200
  • 使用 HashMap 优化嵌套循环:Java 对象数组转换

    使用 HashMap 优化嵌套循环:Java 对象数组转换使用 HashMap 优化嵌套循环:Java 对象数组转换使用 HashMap 优化嵌套循环:Java 对象数组转换使用 HashMap 优化嵌套循环:Java 对象数组转换

    本文旨在提供一种使用 HashMap 优化 Java 中嵌套循环的有效方法,特别是当循环涉及对象数组并进行相等性检查时。通过将内部循环转换为 HashMap 查询,可以显著降低时间复杂度,提高代码性能。本文将提供详细的步骤和示例代码,帮助读者理解和应用这种优化技巧。 在处理包含嵌套循环的 Java …

    2026年9月30日 • 用户投稿
    100
  • 智现未来联合晶合集成荣获爱分析“AI Agent最佳实践案例奖”

    智现未来联合晶合集成荣获爱分析“AI Agent最佳实践案例奖”智现未来联合晶合集成荣获爱分析“AI Agent最佳实践案例奖”智现未来联合晶合集成荣获爱分析“AI Agent最佳实践案例奖”智现未来联合晶合集成荣获爱分析“AI Agent最佳实践案例奖”

    近日,爱分析在北京举办了以“技术鼎新,场景跃迁”为主题的第三届ai大模型高峰论坛,重点探讨如何推动人工智能从“技术惊艳”迈向“商业爆发”,助力企业实现效率与价值的跨越式提升。 由智现未来与晶合集成联合打造的“大模型驱动的半导体晶圆制造智能体应用”成为大会焦点。该项目在半导体等高端制造领域实现了核心技…

    2026年9月30日 • 用户投稿
    100
  • Java代码无报错但无法运行:二进制转十进制的常见陷阱与解决方案

    本文旨在帮助Java初学者解决代码无报错但无法正常运行的问题,特别是针对二进制转换为十进制的场景。通过分析常见错误原因,例如误用取余运算符,提供详细的调试方法和修正后的代码示例,帮助读者理解并掌握正确的二进制转换逻辑,避免程序进入死循环,确保代码的正确执行。 在Java编程中,有时会遇到代码没有报错…

    2026年9月30日
    100
  • 中山大学:张溢副教授课题组利用原位透射电子显微镜在负电容效应的畴动力学方面取得新进展

    中山大学:张溢副教授课题组利用原位透射电子显微镜在负电容效应的畴动力学方面取得新进展中山大学:张溢副教授课题组利用原位透射电子显微镜在负电容效应的畴动力学方面取得新进展中山大学:张溢副教授课题组利用原位透射电子显微镜在负电容效应的畴动力学方面取得新进展中山大学:张溢副教授课题组利用原位透射电子显微镜在负电容效应的畴动力学方面取得新进展

    随着传统晶体管不断小型化,“功耗墙”问题日益突出,难以突破,摩尔定律正面临失效的风险,亟需在器件结构和工作机制方面实现创新。铁电材料所具备的负电容效应有望打破玻尔兹曼电子分布带来的限制,为降低功耗提供新路径。然而,由于负电容效应具有瞬态性和不稳定性,其背后的铁电畴动力学机制尚不清楚,阻碍了该领域的深…

    2026年9月30日 • 用户投稿
    100
  • 支付宝账号怎么注销_支付宝账号注销完整流程图解

    支付宝账号怎么注销_支付宝账号注销完整流程图解支付宝账号怎么注销_支付宝账号注销完整流程图解支付宝账号怎么注销_支付宝账号注销完整流程图解支付宝账号怎么注销_支付宝账号注销完整流程图解

    注销支付宝账号需先确认无余额、还清欠款、解除绑定及无未完成交易,再通过APP提交申请并完成身份验证,经历15天冷静期;若开通花呗、借呗等信贷服务,还需拨打95188联系客服单独注销,经历30天冷静期;名下多账号可进入账号管理页面选择指定账号按流程注销。 如果您决定不再使用支付宝账号并希望彻底注销,需…

    2026年9月30日 • 用户投稿
    100
  • 升级长江存储PC450固态硬盘 机械革命耀世16 Ultra图赏

    升级长江存储PC450固态硬盘 机械革命耀世16 Ultra图赏升级长江存储PC450固态硬盘 机械革命耀世16 Ultra图赏升级长江存储PC450固态硬盘 机械革命耀世16 Ultra图赏升级长江存储PC450固态硬盘 机械革命耀世16 Ultra图赏

    9月23日,机械革命正式推出耀世16 ultra新款机型,搭载长江存储全新pc450 ssd,替代原有的pc411版本,官方售价为8999元,参与国家补贴后实际到手价仅为6799.2元。 该新品已抵达评测室,接下来为大家带来详细图赏。 PC450是长江存储专为AI应用、游戏娱乐及日常办公等主流场景打…

    2026年9月30日 • 用户投稿
    300
  • 动态加载 Spring Beans 的最佳实践

    动态加载 Spring Beans 的最佳实践动态加载 Spring Beans 的最佳实践动态加载 Spring Beans 的最佳实践动态加载 Spring Beans 的最佳实践

    本文介绍了如何在 Spring 应用程序中基于环境动态加载不同的 Bean 实现。通过使用 @Conditional 注解和手动配置 Bean,可以根据特定条件选择性地加载 DoThingService 或 NoopService,从而避免了 Bean 冲突问题,并简化了单元测试。 在 Spring…

    2026年9月30日 • 用户投稿
    200
  • sublime如何优化前端工作流 sublime开发HTML/CSS/JS的最佳实践

    sublime如何优化前端工作流 sublime开发HTML/CSS/JS的最佳实践sublime如何优化前端工作流 sublime开发HTML/CSS/JS的最佳实践sublime如何优化前端工作流 sublime开发HTML/CSS/JS的最佳实践sublime如何优化前端工作流 sublime开发HTML/CSS/JS的最佳实践

    sublime text在前端开发中的核心优势体现在其轻量、极速、高度可定制和专注编辑的本质。1. 启动迅速,编辑流畅,适合快速修改;2. 通过package control实现强大的插件扩展,按需构建高效工作流;3. 多光标编辑、命令面板提升操作效率;4. 简洁界面减少干扰,专注代码本身;5. 跨…

    2026年9月30日 • 用户投稿
    500
  • 大模型淘汰赛,零一万物、科大讯飞和商汤们该如何突围?

    大模型淘汰赛,零一万物、科大讯飞和商汤们该如何突围?大模型淘汰赛,零一万物、科大讯飞和商汤们该如何突围?大模型淘汰赛,零一万物、科大讯飞和商汤们该如何突围?大模型淘汰赛,零一万物、科大讯飞和商汤们该如何突围?

    ai大模型:烧钱盛宴后的残酷现实,下一个倒下的会是谁? 近期,AI大模型领域风云变幻,曾经的“大模型六小虎”之一零一万物战略调整,将专注于小参数行业模型,其核心团队并入阿里,预示着这场烧钱大战的残酷性。 与此同时,MiniMax旗下海螺AI面临版权诉讼,更凸显了大模型发展面临的挑战。 不仅是创业公司…

    2026年9月30日 • 用户投稿
    200
  • 怎么用豆包AI帮我生成Vue3组合式API 3分钟学会用AI写现代前端逻辑

    怎么用豆包AI帮我生成Vue3组合式API 3分钟学会用AI写现代前端逻辑怎么用豆包AI帮我生成Vue3组合式API 3分钟学会用AI写现代前端逻辑怎么用豆包AI帮我生成Vue3组合式API 3分钟学会用AI写现代前端逻辑怎么用豆包AI帮我生成Vue3组合式API 3分钟学会用AI写现代前端逻辑

    豆包ai能高效辅助编写vue3组合式api代码,具体方法如下:1. 明确功能需求,如实现待办事项列表的添加、删除和标记完成功能;2. 让ai生成基础模板与响应式数据,使用ref创建响应式变量并封装添加逻辑;3. 细化功能,补充删除和标记完成的方法及模板事件绑定;4. 进阶优化,将逻辑抽离为自定义ho…

    2026年9月30日 • 用户投稿
    100
  • 华为与浙大携手发布 DeepSeek-R1-Safe 大模型:AI安全与性能完美平衡

    在刚刚落幕的华为全联接大会上,华为技术有限公司携手浙江大学共同发布了国内首款基于昇腾千卡算力平台打造的基础大模型——DeepSeek-R1-Safe。该模型聚焦当前人工智能领域中的安全与性能难题,标志着我国在AI安全技术研发方面迈出了关键一步。![图片](https://example.com/im…

    用户投稿 2026年9月30日
    100
  • 极速漫画官方登录主页_极速漫画在线漫画阅读网

    极速漫画官方登录主页_极速漫画在线漫画阅读网极速漫画官方登录主页_极速漫画在线漫画阅读网极速漫画官方登录主页_极速漫画在线漫画阅读网极速漫画官方登录主页_极速漫画在线漫画阅读网

    极速漫画官方登录主页是https://m.manhuagui.com/,该平台资源丰富,涵盖热血、冒险、奇幻等多种题材,持续更新连载与完结作品,支持原创内容发布;阅读体验流畅,界面简洁,支持横竖屏切换,加载迅速,提供个性化设置;用户可注册账号同步进度,使用收藏夹、评论互动及关键词搜索等功能,便捷实用…

    2026年9月30日 • 用户投稿
    900
  • Sublime实现数据库读写分离策略配置_适合大型高并发系统数据管理

    Sublime实现数据库读写分离策略配置_适合大型高并发系统数据管理Sublime实现数据库读写分离策略配置_适合大型高并发系统数据管理Sublime实现数据库读写分离策略配置_适合大型高并发系统数据管理Sublime实现数据库读写分离策略配置_适合大型高并发系统数据管理

    sublime text可通过配置文件、插件和中间层逻辑辅助实现数据库读写分离。1. 在配置文件中明确区分主库和从库连接信息,使用清晰命名并借助语法高亮提升可读性;2. 安装db browser for sqlite、advancednewfile等插件提升数据库开发效率;3. 在应用层编写逻辑根据…

    2026年9月30日 • 用户投稿
    200

发表回复

登录后才能评论
关注微信