Вам необходимо экранировать символ '
, так как он также является разделителем строки в одинарных кавычках:
$replace = '/[!\/.,#\s\-:?"\']+/';
^^
Экранирование выполняется путем добавления \
перед ним.Обычно это логично, так как в противном случае вы закончили бы определение строки, что затем привело бы к синтаксической ошибке (PHP не может проанализировать ваш код).См. Строка в одинарных кавычках Документы .
Существует ли более простой способ перечислить все заменяемые символы?
Разве не достаточно просто перечислить их (как вы уже делаете)?Поэтому я должен признать, что мне непонятно, о чем вы на самом деле беспокоитесь, поэтому я не могу предложить что-то более простое.