NetSuite PDF模板中如何正确接受或替换字段内的&符号
NetSuite PDF模板&符号渲染异常解决方案
问题根因
NetSuite高级PDF/HTML模板基于FreeMarker引擎渲染,默认开启HTML特殊字符自动转义,你写的表达式无效原因有两个:
- 替换逻辑无实际作用:
?replace("&","&")是将字符&替换为自身,等于没做处理。你当前读取到的字段值里实际存储的是转义后的字符串&,替换目标从一开始就写错了 - 默认转义规则拦截:就算你把文本替换成了裸的
&符号,引擎输出时会自动将其转义为HTML实体&,最终打印出来就还是实体编码而非&符号本身。
可直接复用的解决方法
根据字段实际存储情况二选一即可:
场景1:字段值本身存的是转义后的&(你的当前场景)
直接替换字段内的&为&,同时通过?no_esc关闭该段输出的自动转义,代码如下:
${record.entity.altname?upper_case?replace("&", "&")?no_esc}
这段代码处理后输出结果为RIVIERA WINES & SPIRITS SAPI DE CV,符合预期。
注意:?no_esc仅对当前这一个字段的输出生效,不会影响模板其他位置的默认转义规则,不会造成全局渲染风险。
场景2:字段值存的是原生&符号,只是被引擎自动转义
这种情况不需要写替换逻辑,直接加?no_esc跳过转义即可:
${record.entity.altname?upper_case?no_esc}
避坑提示
- 不要写反向替换逻辑
?replace("&","&"),会造成双重转义,最终输出& - 不要随意给整段模板全局关闭转义,如果字段内存在
<、>这类字符,会破坏HTML标签结构,直接导致整个PDF渲染崩溃 - 如果字段是外部用户可输入的非信任内容,关闭转义前先过滤特殊标签,避免渲染异常
内容的提问来源于stack exchange,提问作者Frederik Castillo
相关产品推荐
相关产品推荐

