Список замены ColdFusion переупорядочивает возвращаемую строку

Я пытаюсь очистить отправленные имена файлов.

Я использую replacelist(filename,"',##,&, ",",,and,-"), который должен

  • удалить ' и #
  • заменить & на and
  • замените пробелы на -.

При задании "apost's & pound#.JPG" вместо возврата:

    "aposts-and-pound.jpg" 

replaceList возвращает:

    "apostandspound-.JPG"

Я использую ColdFusion 10.


person Ookamikun    schedule 24.01.2013    source источник
comment
+1 за хороший вопрос от новичка. Добро пожаловать в stackoverflow :)   -  person Leigh    schedule 24.01.2013


Ответы (1)


Это не переупорядочивание - это связано с тем, как работает обработка списка CF - пустые элементы игнорируются/удаляются.

Некоторые функции обработки строк List~ имеют дополнительный аргумент для изменения этого поведения (т. е. рассматривать пустые элементы как пустую строку), но ReplaceList, по-видимому, этого не делает.

Вы можете решить эту проблему, выполнив удаление на отдельном этапе замены:

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

or

replacelist( rereplace(filename,"['##]","","all") , "&, " , "and,-" )
person Peter Boughton    schedule 24.01.2013
comment
Может быть, вы захотите подать запрос на улучшение для этого недотепа в replaceList(), @Peter? - person Adam Cameron; 24.01.2013
comment
Хм, собирался также поднять проблему для Railo, но похоже, что он уже ведет себя так, как ожидалось (не требуется IncludeEmptyFields). Теперь я не знаю, стоит ли поднимать вопрос о совместимости, учитывая, что это почти наверняка предпочтительное поведение и, надеюсь, оно изменится с CF? :/ - person Peter Boughton; 24.01.2013
comment
ура, я проголосовал. Я бы все же упомянул об этом Райло, может быть, просто чтобы они знали, но я думаю, что поведение Райло здесь правильное. Хорошие новости. - person Adam Cameron; 24.01.2013