如何在ColdFusion中编码字符串,不包括“点”

时间:2012-03-30 06:01:56

标签: encoding coldfusion character-encoding urlencode coldfusion-9

我正在寻找一种用ColdFusion编码字符串但不包括“。”的方法。 这是我到目前为止所尝试的:

<!--- Test area --->
<cfset str="ChrisTilghmanFirstFlash.Eflv">
<cfset str1="Chris Tilghman First Flash.Eflv">
<cfset str2="Chris-Tilghman First_Flash.Eflv">
<cfset enc1 = urlEncodedFormat(str,"utf-8" )>
<cfset enc2 = urlEncodedFormat(str1,"utf-8")>
<cfset enc3 = urlEncodedFormat(str2,"utf-8")>
<cfoutput>#enc1#</cfoutput><br>
<cfoutput>#enc2#</cfoutput><br>
<cfoutput>#enc3#</cfoutput><br>
<!--- END test area --->

urlEncode utf-8其他也编码“点”,“ - ”和“_”字符。如何防止出现这种情况?

4 个答案:

答案 0 :(得分:3)

这将为您解决: -

<cfset str="ChrisTilghmanFirstFlash.Eflv">
<cfset str1="Chris Tilghman First Flash.Eflv">
<cfset str2="Chris-Tilghman First_Flash.Eflv">
<cfset enc1 = urlEncodedFormat(str,"utf-8" )>
<cfset enc2 = urlEncodedFormat(str1,"utf-8")>
<cfset enc3 = urlEncodedFormat(str2,"utf-8")>
<cfoutput>#replace(enc1, "%2E", ".", "ALL")#</cfoutput><br>
<cfoutput>#replace(enc2, "%2E", ".", "ALL")#</cfoutput><br>
<cfoutput>#replace(enc3, "%2E", ".", "ALL")#</cfoutput><br>

答案 1 :(得分:3)

您可以使用点作为列表分隔符,并单独编码列表中的每个项目。像这样:

<cfset enc1="">
<cfloop list="#str#" index="i" delimiter=".">
  <cfset listAppend(enc1,urlEncodedFormat(i,"utf-8"),".")>
</cfloop>

答案 2 :(得分:2)

可以在this thread中找到一个答案,

  

使用[s] ColdFusion的ReplaceList()函数来“纠正”所犯的错误   通过URLEncodedFormat()生成符合RFC 3986的URL编码   字符串。

<强>代码:

<cfset string = replacelist(urlencodedformat(string), "%2D,%2E,%5F,%7E", "-,.,_,~")>

答案 3 :(得分:0)

(评论太长了......)

我在尝试实现RFC 3986编码时遇到了这个问题。如果您使用较新的encodeForURL功能(而不是urlEncodedFormat),它可以让您更近一点,但仍需要一些调整。

根据RFC 3986:

  • 应该转义的未保留字符:   ALPHA / DIGIT / "-" / "." / "_" / "~" /
  • 空格应编码为%20,而不是+
  • 应转义的保留字符包括:: / ? ## [ ] @ ! $ & ' ( ) * + , ; =

使EncodeForURL的结果兼容:

  • 强制编码星号&#34; *&#34; (保留字符)
  • 反转代字号&#34;〜&#34;的编码(应该进行编码)。
  • 从&#34; +&#34;更改空间编码到&#34;%20&#34;:

<强>代码:

encodedText = encodeForURL("space period.asterisk*");
encodedText = replaceList( encodedText , "%7E,+,*", "~,%20,%2A");