2013-01-24 10 views
5

Próbuję wyczyścić nadesłane nazwy plików.Reorganizacja wymiany elementów ColdFusion zwróciła ciąg znaków

Używam replacelist(filename,"',##,&, ",",,and,-") które powinny

  • usunąć ' i #
  • zastąpić & z and
  • zastąpić spacje z -.

Kiedy podano "apost's & pound#.JPG" zamiast zwracania:

"aposts-and-pound.jpg" 

replaceList Powroty:

"apostandspound-.JPG" 

Używam ColdFusion 10.

+1

+1 za miły pytanie 1st-timer. Witaj w stackoverflow :) – Leigh

Odpowiedz

8

To nie jest zmiana kolejności - jest to spowodowane jak działa przetwarzanie listy CF - puste elementy są ignorowane/usuwane.

Niektóre funkcje przetwarzania ciągów list mają dodatkowy argument zmieniający to zachowanie (to znaczy traktują puste elementy jako pusty ciąg znaków), ale nie są wyświetlane elementy ReplaceList.

Problem ten można rozwiązać, wykonując przeprowadzki w oddzielnym etapie do zamienników:

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

lub

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

Może chcesz zgłosić prośbę o ulepszenie dla tego shortgall'a w 'replaceList()', @Peter? –

+0

Proszę bardzo: https://bugbase.adobe.com/index.cfm?event=bug&id=3489021 –

+2

Hmm, już miałem poruszyć kwestię dotyczącą Railo, ale wygląda na to, że już działa zgodnie z oczekiwaniami (nie jest wymagane użycie IncludeEmptyFields). Teraz nie wiem, czy warto podnosić kwestię zgodności, biorąc pod uwagę, że jest to prawie na pewno preferowane zachowanie i mam nadzieję, że zmieni się z CF? :/ –