3

我正在寻找一种使用ColdFusion编码字符串的方法,但不包括“。”。 这是我到目前为止已经试过:如何在ColdFusion中对字符串进行编码,排除“dot”

<!--- 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

真的是你需要的解决方案?从我正在阅读的内容来看,听起来更像是你只想编码空间字符。在这种情况下,替换(str,“”,“%20”,“all”)就足够了。 – ale 2012-03-30 15:04:16

回答

2

一个答案可以在this thread发现,这

使用[s] ColdFusion的ReplaceList()函数来 “纠正” 错误的URLEncodedFormat制造 ()来产生符合RFC 3986的URL编码的 字符串。

代码:

<cfset string = replacelist(urlencodedformat(string), "%2D,%2E,%5F,%7E", "-,.,_,~")> 
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> 
+0

寻找一种通用的方法。如果还有其他特殊字符,怎么处理这个问题? – Kalanamith 2012-03-30 06:38:09

+1

好吧,你需要更清楚你想要什么。因为urlEncodedFormat用于编码特殊字符,所以它正在做它应该做的事情。通过阅读你的问题,我假设你想编码的一切,但一个句号。你有什么实际需求? – baynezy 2012-03-30 06:42:01

+0

http://cookbooks.adobe.com/post_URL_encoding_to_RFC_3986-17970.html这可能对每个人都有帮助。谢谢 – Kalanamith 2012-03-30 06:55:16

3

你可以使用点作为列表分隔符,并在列表中进行单独编码每个项目。事情是这样的:

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

我没有downvote(s)的问题,但有人可能会提出我的解决方案有什么问题吗? – ale 2012-03-30 15:14:49

+0

这种方法是可以的,但我会让它更灵活,以支持需要排除的其他字符:将字符串拆分为列表,对部分进行编码,合并回去。 – Sergii 2012-03-30 21:09:51

0

(太长评论...)

我碰到这个线程来在落实RFC 3986编码。如果你使用新的encodeForURL函数(而不是urlEncodedFormat),它会让你更接近一点,但仍需要一些调整。

根据RFC 3986: ALPHA/DIGIT/"-"/"."/"_"/"~" /

  • 空间应该被编码为应该被转义的%20代替+
  • 保留字符包括:应该转义

    • 未预留字符: :/? ## [ ] @ ! $ & ' () * + , ; =

    为了使EncodeForURL兼容的结果:星号的

    • 部队编码“*”(保留字)
    • 反向的波浪线“〜”编码(应该编码)。从 “+” 到 “%20”
    • 更改空间编码:

    代码:

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