Много народу заливает фото через ФТП, поэтому фильтрация при загрузке не выход.
Тут либо фильтровать символы в названии когда выбираем картинку в карточке товара, либо искать другое решение.
Хотя в карточке товара тоже не выход, ведь не будет работать фильтрация по названию в сторонних модулях( например BachEditor)
Заменять ненужные символы автоматом тоже не совсем правильно.
Допустим есть 2 картинки 123?.jpg и 123!.jpg . После preg_replace на выходе опять получим два изображения с одинаковым именем. Да, допустим поставим проверку на то, есть ли файл с таким же именем, но это даст путаницу пользователю, так как он увидит сообщение что " файл с таким именем уже существует" и будет искать, где же файл с таким именем на сервере. Но поиски будут тщетны, так как он будет искать картинку 123?.jpg а не 123-.jpg
Если и проверять имя файла при загрузе, то нужно не заменять автоматом с помощью preg_replace , а выводить ошибку при загрузке "вы пытаетесь загрузить файл с запрещенными символами в названии!"