首页   >   代码编程

Freemarker字符串转义处理,防止引号冲突

freemarker一直是我在模板引擎中的首选,网站在引入百度分享的时候,碰见了一个字符串转义的问题,具体表现为:后端传过来的字符串中是带有引号的,而我的变量接受的时候,由于是字符串类型,所以我也写了引号,此时,如果后端没有做转义,直接在js中解析出来就会有问题。

这个问题,并不是我第一次碰见,之前也碰见过一次,直接用一个js变量来接收后端返回的值,由于当时用的不是freemarker模板引擎,所以不是很熟悉语法,最后不得已用了一种比较蠢的方法来处理:将文本提前解析到一个pre标签中,再拿js去获取

两次的问题都是同一个原因,特意来写一篇文章记录一下,免得自己日后再犯类似的错误,前面提到的两个问题,第二种解决方案就不多说了,今天主要来说一下第一种解决方案:利用freemarker的语法来处理

问题如下图:

Freemarker字符串转义处理,防止引号冲突

bdText变量的值,是直接由后端返回的,然后利用freemarker的el表达式获取出来,变量使用双引,而后端返回的字符串中正好也带有双引号。

可能有人会问,直接把bdText改成单引不就OK了?确实可以,但是治标不治本,万一后端返回的字符串中还带有单引,岂不完蛋。。。

其实在此之前,我已经对文本做过一次处理了,返回的字符中还可能会带有换行符“\n”,这种语法在js变量中识别不了,给他替换成空,或者替换成<br>,使用的是freemarker的replace方法,这次的问题依旧可以使用replace方法来解决:直接将字符串中的双引号替换成单引号

Freemarker字符串转义处理,防止引号冲突

具体语法如下:

${article.text?replace("\r\n", "")?replace("\"", "'")}

QQ群Ⅰ: 686430774 (已满)

QQ群Ⅱ: 718410762 (已满)

QQ群Ⅲ: 638620451 (已满)

QQ群Ⅳ: 474195684

如果文章有帮到你,可以考虑请博主喝杯咖啡!

分享到:

欢迎分享本文,转载请注明出处!

作者:不忘初心

发布时间:2019-03-10

永久地址:https://www.jiweichengzhu.com/article/c5158065db574ef789a68f3495b75f25

评论

相关阅读