В большинстве случаев, когда надо экранировать или удалять опасные символы, в php есть готовые решения. Например htmlspecialchars преобразует символы в их HTML сущность. Проше говоря экранирует.
Strip_tags удаляет HTML и PHP теги из строки.
Во многих случаях это полезные функции и пренебрегать ими не стоит. Но иногда, для каких-то локальных нужд, достаточно удалить некоторые символы.
Вот для таких целей мы и будем создавать маленькую функцию. А заодно заменим пробел на тире.
$array = array('~','@','#','%','^','&','*','`',';','"','\'','/',':',';','|','?','<','>','.'); $letters = preg_split('//u', $text, -1, PREG_SPLIT_NO_EMPTY); $conclusion = array_diff($letters,$array); $data = implode($conclusion); echo preg_replace('/ /u', '-', $data);
Теперь разберемся что тут происходит
В переменную $array мы собираем массив из тех символов, которые надо удалить.
Переменная $text содержит исходный текст.
Далее с помощью функции preg_split и регулярного выражения разбиваем текст на отдельные символы.
Функция array_diff вычисляет расхождения в массиве $letters и $array Особенность этой функции в том, что она выводи только те символы, которые не встречаются в массиве $array. Этим и воспользуемся
Далее с помощью implode переводим массив в строку.
И если необходимо пробел заменить на что-то другое, то используем preg_replace. Если в этом нет необходимости, то выводим переменную $data