Drupal 中 HTML 链接被重复转义导致渲染异常的解决方案
技术百科
花韻仙語
发布时间:2026-01-01
浏览: 次 drupal 节点在后台编辑时 html 正常,但前台渲染时出现 url 被双重转义(如 `` 变为 `...">`),根本原因是输入格式启用了“自动将 url 转为链接”过滤器,与手动编写的 html 冲突。
该问题典型表现为:你在富文本编辑器中直接输入了完整 HTML(例如
CLICK TO WATCH
),内容在数据库和后台预览中显示正常;但一旦通过 Views、节点视图或主题层渲染,浏览器中实际输出却变成:CLICK TO WATCH
这是典型的 HTML 实体双重编码现象——Drupal 的「Convert URLs into links」过滤器会主动扫描纯文本中的 URL(如 http://myurl.com),并将其包裹为 标签;而当原始内容本身已是合法 HTML 时,该过滤器会错误地将已存在的 中的引号和尖括号当作普通文本再次转义,导致嵌套污染。
✅ 正确解决方式:禁用冲突过滤器
- 进入管理后台:Admin → Configuration → Content authoring → Text formats and editors(Drupal 8/9/10 路径;Drupal 7 为 Administer → Configuration → Content authoring → Input formats)
- 找到你当前节点或字段所使用的文本格式(如 Full HTML、Basic HTML 或自定义格式),点击右侧 Configure
- 在「Enabled filters」列表中,取消勾选 “Convert URLs into links”(对应机器名通常为 filter_url)
- 滚动到底部,点击 Save configuration
⚠️ 注意事项:
- 不要禁用「HTML filter」或「Limit allowed HTML tags」等安全相关过滤器,否则将引入 XSS 风险;
- 若需保留自动链接功能(如用户提交纯文本评论时自动转链接),应为不同用途创建独立文本格式(例如 Plain text with auto-links 用于评论,Full HTML (no auto-link) 用于管理员富文本编辑);
- 修改后务必清空所有缓存(包括页面缓存、动态页面缓存、渲染缓存及 OPcache,如启用);
- 若使用 Paragraphs、Field Group 等模块,请确认嵌套字段是否继承了同一文本格式。
? 补充验证:可通过以下 Twig 模板代码临时绕过过滤器(仅调
试用,不推荐生产环境):
{# 在 node.html.twig 或 views-view-fields.html.twig 中 #}
{{ content.field_custom_html|raw }}但前提是该字段值已存储为未过滤的原始 HTML,且对应文本格式已按上述步骤禁用 filter_url。
总结:Drupal 的文本过滤机制是双刃剑——保障安全的同时也要求开发者明确区分「纯文本输入」与「受控 HTML 输入」场景。手动编写 HTML 时,必须关闭自动 URL 转换,这是最佳实践,而非权宜之计。
# ai
# 这是
# 你在
# 可通过
# 自定义
# 而非
# 表现为
# 你当
# 已是
# 浏览器
# 器中
# auto
# input
# http
# html
# 编码
# 数据库
# node
# 继承
# asic
# xss
# Filter
# href
# 权宜之计
相关栏目:
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
AI推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
SEO优化<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
技术百科<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
谷歌推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
百度推广<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
网络营销<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
案例网站<?muma echo $count; ?>
】
<?muma
$count = M('archives')->where(['typeid'=>$field['id']])->count();
?>
【
精选文章<?muma echo $count; ?>
】
相关推荐
- 如何在Golang中实现WebSocket广播_使
- 短链接怎么用php递归还原_多层加密链接的处理法【
- 如何理解Go指针和内存分配关系_Go Pointe
- Windows 11怎么设置默认解压软件_Wind
- Mac电脑如何恢复出厂设置_Mac抹掉数据并重装系
- php下载安装后swoole扩展怎么安装_异步框架
- C++如何解析JSON数据?(nlohmann/j
- Python性能剖析高级教程_cProfileLi
- Win11怎么设置触控板手势_Windows11三
- Bpmn 2.0的XML文件怎么画流程图
- C++如何将C风格字符串(char*)转换为std
- Win11如何设置计划任务 Win11定时执行程序
- Win11怎么设置麦克风权限_允许应用访问Win1
- Win11如何卸载OneDrive_Win11卸载
- php中常量能用::访问吗_类常量与作用域操作符使
- 如何在Golang中实现微服务负载均衡_Golan
- Win11怎么关闭搜索历史 Win11清除搜索框最
- php串口通信波特率怎么选_根据硬件手册设置正确波
- Win10怎么更改用户名 Win10修改账户名称操
- Python生成器表达式内存优化_惰性计算说明【指
- Python与MongoDB NoSQL开发实战_
- Win11系统更新后黑屏怎么办 Win11更新黑屏
- Python正则表达式实战_模式匹配说明【教程】
- Win11蓝牙开关不见了怎么办_Win11蓝牙驱动
- Win11如何设置省电模式 Win11开启电池节电
- Windows 11登录时提示“用户配置文件服务登
- PHP cURL GET请求:正确设置请求头与身份
- Golang如何遍历目录文件_Golang fil
- c++的STL算法库find怎么用 在容器中查找指
- php会话怎么开启_session_start函数
- Windows 11如何开启文件夹加密(EFS)_
- php本地部署后session无法保存_sessi
- Win11怎么恢复出厂设置_Win11重置此电脑保
- php本地部署支持nodejs吗_php与node
- Linux怎么查找死循环进程_Linux系统负载分
- Windows电脑如何截屏?(四种快捷方法)
- C++如何使用std::async进行异步编程?(
- 如何用::实现单例模式_php静态方法与作用域操作
- 如何使用Golang实现容器健康检查_监控和自动重
- Linux如何使用grep搜索文件内容_Linux
- Win11怎么查看局域网电脑_Windows 11
- php做exe支持多线程吗_并发处理实现方式【详解
- Windows如何使用注册表查找和删除项?(reg
- Win11如何关闭小娜Cortana Win11禁
- Win11怎么开启智能存储_Windows11存储
- 如何使用Golang sync.Map实现并发安全
- 为什么Go建议使用error接口作为错误返回_Go
- Win11怎么开启专注模式_Windows11时钟
- 如何用正则与预处理高效拦截带干扰符的恶意域名
- LINUX怎么查看进程_LINUX ps命令查看运

QQ客服