首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StringContext$InvalidEscapeException:创建HTML字符串体时,无效的转义'\:‘不是[\b,\t,\n,\f,\r,\\,\",\']之一

StringContext$InvalidEscapeException:创建HTML字符串体时,无效的转义'\:‘不是[\b,\t,\n,\f,\r,\\,\",\']之一
EN

Stack Overflow用户
提问于 2020-12-27 18:52:17
回答 2查看 109关注 0票数 0

在用户注册,我想发送一封带有html主体的电子邮件给用户。我创建了电子邮件模板,如下所示:

代码语言:javascript
复制
object EmailHTML {
  val body =
    s"""
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]-->
...
""".stripMargin
}

我是这样使用它的:

代码语言:javascript
复制
val html = if(userToken.tokenType == UserTokenType.RegistrationConfirmation){
        EmailHTML.body 
      }else {
        EmailHTML.body 
      }
SignupEmail(subject,from,html)

当我执行代码时,我得到以下错误:

代码语言:javascript
复制
Caused by: scala.StringContext$InvalidEscapeException: invalid escape '\:' not one of [\b, \t, \n, \f, \r, \\, \", \'] at index 454 in "
       |<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head>
    ...

如果我删除行,则不会发生异常:

代码语言:javascript
复制
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]-->

但是我收到的电子邮件格式不是很好!可能的问题是什么,这条线的重要性是什么?

代码语言:javascript
复制
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]-->
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-27 20:26:25

您可能会发现另一个有用的解决方案是在"""之前删除s

代码语言:javascript
复制
val body1 = """
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]-->
...""".stripMargin

它将导致字符串不被计算,因此它将保持原样。

Scastie上运行的代码。

票数 1
EN

Stack Overflow用户

发布于 2020-12-27 20:19:27

通过添加额外的\解决了这个问题,也就是将o\:更改为o\\:和其他地方。我认为解决方案是微不足道的,只是没有理清思路

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65464962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档