2013-01-24 10 views
5

Ich versuche gesendete Dateinamen zu bereinigen.ColdFusion Replace List Reorders gibt den String zurück

Ich verwende replacelist(filename,"',##,&, ",",,and,-") die '

  • entfernen sollten und #
  • ersetzen & mit and
  • ersetzen Räume mit -.

Wenn "apost's & pound#.JPG" gegeben, anstelle der Rücksendung:

"aposts-and-pound.jpg" 

replacelist kehrt:

"apostandspound-.JPG" 

I Coldfusion 10.

+1

+1 für eine schöne Frage von einem ersten Auslöser. Willkommen bei stackoverflow :) – Leigh

Antwort

8

bin mit Neuordnungs Dies ist nicht - es gebührt wie die CF-Listenverarbeitung funktioniert - leere Elemente werden ignoriert/entfernt.

Einige der List ~ String-Verarbeitungsfunktionen haben ein zusätzliches Argument, um dieses Verhalten zu ändern (d. H. Leere Elemente als leere Zeichenfolge behandeln), aber ReplaceList erscheint nicht.

Sie können dieses Problem lösen, indem sie die Umzüge in einem separaten Schritt auf den Ersatz tun:

<cfset NewFilename = rereplace(Filename,"['##]","","all") /> 
<cfset NewFilename = replacelist(NewFilename,"&, ","and,-") /> 

oder

replacelist(rereplace(filename,"['##]","","all") , "&, " , "and,-") 
+0

Vielleicht möchten Sie eine Verbesserungsanfrage für diesen Shortgall in 'replaceList()', @Peter? –

+0

Hier gehts: https://bugbase.adobe.com/index.cfm?event=bug&id=3489021 –

+2

Hmm, war im Begriff, ein Problem für Railo auch zu erheben, aber sieht aus, als ob es sich bereits wie erwartet verhält (keine IncludeEmptyFields erforderlich). Jetzt weiß ich nicht, ob es sich lohnt, ein Kompatibilitätsproblem zu stellen, da dies fast sicher bevorzugtes Verhalten ist und sich hoffentlich mit CF ändern wird? :/ –