转义外部链接的URL编码

时间:2015-08-10 07:37:27

标签: coldfusion coldfusion-9

在我的应用程序中,我有一个编辑器,允许用户编写格式化的电子邮件。一切都有效,除非他们有一些具有特殊字符的网址被用作超链接。例如

this is a link. <a href="http://www.somesiteurl.com?token=xO53C3hjLhMyL%2BDF42Dft8I8W%2F7dqTnPCHnqhgQyz6%2BcqzAMmv40mQa1BSqUa8Z4HM6E8tgrBxz1Yfiox188BJZQvmZgN18tb%2FINpP0XQydHCy27UQDp0u%2BvcZBYkQoDoQ72LxWU%2FWD3FM49vSV%2F8yciYjMpaWiVxlg2bX7TzYg%3D">Click Here</a>  

正如您所看到的,令牌包含的字符是utf-8编码元素,如+,/和+符号。 我怎样才能避免它们在渲染时被解码。 渲染的网址变为

http://www.somesiteurl.com?token=xO53C3hjLhMyL+DF42Dft8I8W/7dqTnPCHnqhgQyz6+cqzAMmv40mQa1BSqUa8Z4HM6E8tgrBxz1Yfiox188BJZQvmZgN18tb/INpP0XQydHCy27UQDp0u+vcZBYkQoDoQ72LxWU/WD3FM49vSV/8yciYjMpaWiVxlg2bX7TzYg=

因此链接无法正常工作。我无法控制用户如何创建此网址。

1 个答案:

答案 0 :(得分:3)

我认为您将UTF-8与URL编码/解码混淆。看起来你正在做一个urldecode,你应该只是通过URL不变。看一下下面的代码片段,它会稍微使用你的令牌:

<cfset token="xO53C3hjLhMyL%2BDF42Dft8I8W%2F7dqTnPCHnqhgQyz6%2BcqzAMmv40mQa1BSqUa8Z4HM6E8tgrBxz1Yfiox188BJZQvmZgN18tb%2FINpP0XQydHCy27UQDp0u%2BvcZBYkQoDoQ72LxWU%2FWD3FM49vSV%2F8yciYjMpaWiVxlg2bX7TzYg%3D">
<cfset tokendecoded=urldecode(token)>
<cfoutput>
token unchanged gives: token = #token#<br />
tokendecoded gives:  token = #tokendecoded#<br />
</cfoutput>

对我来说,这给出了以下输出:

token unchanged gives: token = xO53C3hjLhMyL%2BDF42Dft8I8W%2F7dqTnPCHnqhgQyz6%2BcqzAMmv40mQa1BSqUa8Z4HM6E8tgrBxz1Yfiox188BJZQvmZgN18tb%2FINpP0XQydHCy27UQDp0u%2BvcZBYkQoDoQ72LxWU%2FWD3FM49vSV%2F8yciYjMpaWiVxlg2bX7TzYg%3D
tokendecoded gives: token = xO53C3hjLhMyL+DF42Dft8I8W/7dqTnPCHnqhgQyz6+cqzAMmv40mQa1BSqUa8Z4HM6E8tgrBxz1Yfiox188BJZQvmZgN18tb/INpP0XQydHCy27UQDp0u+vcZBYkQoDoQ72LxWU/WD3FM49vSV/8yciYjMpaWiVxlg2bX7TzYg=

因此,您可能希望在发送令牌之前对其进行URL编码。然后解码它将工作正常。如果要在传递令牌时获取令牌,则不要对其进行解码。你的选择。