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"); 
    
  • 相關問題