我正在寻找一种用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其他也编码“点”,“ - ”和“_”字符。如何防止出现这种情况?
答案 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的结果兼容:
<强>代码:强>
encodedText = encodeForURL("space period.asterisk*");
encodedText = replaceList( encodedText , "%7E,+,*", "~,%20,%2A");