2

我今天在使用 Spring 的以下代码中遇到了一个问题:

String tabTitle = messageSource.getMessage(tabName, new Object[] {}, tabName, locale)

这用于获取我们网站顶部的一系列选项卡的显示标题(uPortal的一个实例)。问题是如果tabName包含单引号,它会自动从结果中删除。例如What's For Lunch变成Whats For Lunch.

我已经找到了原因,这是因为该方法中的第三个参数应该是java.text.MessageFormat中指定的格式。需要2个单引号。

因为我们没有传递任何具有格式的参数,所以我可以tabName在将其作为第三个参数传递之前安全地转义任何特殊字符。我可以在这里用 2 个单引号手动替换单引号,但我真正想要的是类似Pattern.quote(),仅用于MessageFormat语言,可以保证处理所有转义。这样的事情存在吗?

4

1 回答 1

2

没有任何方法,但是将整个文本括在 ASCII 单引号字符中将完成同样的事情。您可以按照您的描述进行'→替换,然后用 . 将文本括起来。从MessageFormat 文档'''

例如,模式字符串"'{''}'"被解释为'{(引号开头和左大括号)、''(单引号)和}'(右大括号和引号结尾)的序列,而不是 '{''}'(带引号的左右大括号) : 代表字符串"{'}",不是"{}"

于 2016-09-29T18:14:51.047 回答