regex – строка preg_replace

Я хочу заменить не алфавитно-цифровые символы строки в космос.

Я использовал $title= preg_replace("/[^a-zA-Z0-9\s]/", " ", $title);

поэтому, когда пользователи вводят

а!? d $

это будет

abc d

но заставлять пользователя вводить его в текстовый ввод, он переходит на «x.php? title = abc!? d $». Я хочу, чтобы он перешел к «x.php? title = abc + d», потому что я хочу «abc d», «abc $$$$$$$$$ d», «abc __.! d» и т. д., чтобы перейти к тот же URL. как я могу управлять этим. Спасибо.

В основном, вы говорите, что, если рядом друг с другом есть несколько заменяемых символов, вы просто хотите разместить там один пробел. Это правильно?

В этом случае, да, это легко: вам просто нужно добавить знак плюса после класса символов в регулярном выражении, например:

 $title = preg_replace("/[^a-zA-Z0-9\s]+/", " ", $title); 

Значок плюса указывает регулярному выражению искать одно или несколько совпадений предыдущего элемента.

Надеюсь, это поможет.

Чтобы избавиться от нежелательных символов, используйте следующий код:

 $_GET['title'] = 'abc__.!d'; $title = preg_replace('/[^a-zA-Z0-9\s]+/', ' ', $_GET['title']); // "abc d" 

Теперь просто перенаправьте правильный URL (если необходимо)

 if ($_GET['title'] != $title) { header('Location: ....'); die('Redirect to ...URL...'); } 

Вы пробовали переключатель \W для сопоставления символов не-aplha? (В сочетании с + )

 $title= preg_replace(/\W+/g, " ", $title); 

(В JavaScript вам также нужен флаг /g , не уверен, что это верно для PHP)

РЕДАКТИРОВАТЬ:

В требовании указывается, что все _ должны быть устранены, поэтому следующее будет работать.

 (\W|_)+ 

Однако, вероятно, лучше всего указать точные символы, которые вы хотите в этом случае, вместо того, чтобы пытаться создать список исключений, так как мой asnwer начинает делать.