Я хочу заменить не алфавитно-цифровые символы строки в космос.
Я использовал $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 начинает делать.