邮件中使用MessageFormat对单引号的处理方式

MessageFormat是Java用于格式化字符串的工具,常用于解析配置文件和国际化文件中的占位符。在填充邮件模板时,遇到单引号导致格式化错误的问题,因为单引号会被忽略,除非是中文单引号。解决方法是将模板中的单引号替换为双单引号(''),以保留单引号。此问题在处理包含HTML样式的邮件模板时尤为关键,不正确的处理会破坏邮件样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用法介绍

MessageFormat是在text包中的一个常用类java.text.Format下,MessageFormat常用将读取到的配置文件、国际化文件中标注的占位符解析,把参数对应的放入占位符的位置上,从而实现引用参数化。

比如:

String msg = "上{0}山{1}打{2}老{3}虎{4}";  

Object [] array = new Object[]{"A","B","C","D","E"};  

String getValue = MessageFormat.format(msg, array);  

//输出getValue: 上A山B打C老D虎E

使用场景

MessageFormat可以用做将数据库中标注好占位符的邮件模板取出来,把对应的邮件模板参数放入占位符中,从而实现动态填充邮件模板并发送邮件。

遇到问题

在使用MessageFormat填充邮件模板的时候遇到了个问题,发现原来是单引号引起的。在格式化字符串时,两个单引号才表示一个单引号,单个单引号会被忽略,除非中文单引号不会被省略,如:

String getValue = MessageFormat.format("yes, {0} is 'a' pig", "ZhangSan");
 
//输出getValue:yes, ZhangSan is a pig

而在邮件模板中,经常会出现单引号、双引号同时存在的情况,使用MessageFormat填充邮件模板会导致单引号消失,如:

{0}<span lang=EN-US style='font-size:11.5pt;font-family:"微软雅黑",sans-serif'>

//输出为 {0}<span lang=EN-US style=font-size:11.5pt;font-family:"微软雅黑",sans-serif>

最终导致发送出去的邮件样式变乱。

解决方法

如果遇到存在单引号又不得不使用的情况下,需要使用双单引号,如' 'admin' '即可,在使用成对的花括号的情况,如' '{admin}' '即可,所以发送邮件时需要将原模版中的单个引号',替换为两个单引号'',例如:

String htmlText = MessageFormat.format(mailTemplate.templateHtml.replace("'","''"), fillStr );

如果只是使用{,则需要三个单引号,如:'''{'''。不管怎样,双单引号仅代表一对单引号,对于多出的不起作用的单引号(如三个以上单引号)是会被移除的。

参考资料

https://blog.youkuaiyun.com/ShewMi/article/details/77790496

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值