我有一个单页应用程序,它有类似http://example.com/#!something/something/
的URL。问题是,当我发送包含此类url链接的电子邮件时,hotmail用户会弄错(我只在hotmail中注意到了这一点,其他人都很好)。
!
编码为%21
,导致url错误:http://example.com/#%21something/something/
除了重写我的应用程序之外,还有什么可以做的想法:-)。我正在使用swiftmailer发送电子邮件,但我非常怀疑这是否相关。
根据RFC3986,"!"
字符在URI的片段(#...
)组件中是有效的,因此不应使用百分比编码对其进行编码。从这个意义上说,这似乎是outlook.com的一个bug。
一个解决方法是使用纯文本电子邮件:根据我的测试,outlook.com只对!
的HTML电子邮件链接进行编码,纯文本电子邮件是安全的。
然而,真正的解决方案是在客户端代码中进行自己的规范化。URL破解和规范化是一项非常棘手的业务,所以我预计其他电子邮件客户端也会出现问题。对window.location.hash
运行JavaScript decodeUriComponent()
,无论感叹号是否编码,都会得到未编码的"#!/something/something"
版本。我知道这需要修改您想要避免的web应用程序,但据我所知,这是一条可行的道路。