AEM 6中HTL/Sightly多字段URL渲染下划线重复异常问题
诡异的URL下划线重复问题解决方案
哇,这确实是个挺让人摸不着头脑的问题!同一个变量在HTML标签外输出完全正常,但放到<a>的href属性里就自动把单个下划线变成双下划线了,太奇怪了。
问题复现
你提到的场景代码:
<a href="${item.link}">Click</a> <br> ${item.link}
渲染后结果:
<a href="http://example.net/__pinkPanther_is_pink">Click</a> <br> http://example.net/_pinkPanther_is_pink
可能的原因
我之前在CMS模板开发中碰到过类似的情况,大概率是模板渲染引擎对HTML属性内容的特殊处理逻辑导致的:
- 很多模板引擎(比如Freemarker、Velocity这类常用于Multifield场景的引擎)会对HTML属性值做额外的“安全处理”,可能误把单个下划线识别成了需要转义/重复的特殊标记;
- 也有可能是Multifield组件本身的输出逻辑差异:直接输出文本时返回原始存储值,但输出到HTML属性时经过了一层不必要的字符替换处理。
解决办法
试试这几个方案,应该能解决问题:
关闭HTML属性的自动转义
如果你用的是支持原生输出的模板引擎,直接让变量跳过转义处理。比如Freemarker里可以用:<a href="${item.link?no_esc}">Click</a> <br> ${item.link}Velocity则可以确保没有添加强制转义的指令,直接使用原始变量输出。
手动编码下划线
把URL中的下划线替换成URL编码格式%5F,这样渲染引擎就不会把它当成特殊字符处理了。可以在输出时做替换:<a href="${item.link.replace('_', '%5F')}">Click</a> <br> ${item.link}浏览器会自动把
%5F解析回下划线,不影响正常访问。排查Multifield的输出逻辑
检查一下Multifield组件的配置,看是否有针对属性输出的特殊过滤器/处理器,把它禁用或者调整成不对下划线做处理的规则。
内容的提问来源于stack exchange,提问作者Oliver
相关产品推荐
相关产品推荐

