Есть ли способ заменить символ & на и в веб-форме PHP, когда пользователь вводит ее, а не после отправки формы?
PHP находится на сервере, он не контролирует что-либо происходящее ни при каких обстоятельствах на стороне клиента. Он отправляет необработанный текст с веб-сервера, 100-мегатонное термоядерное устройство взрывается, и PHP больше не существует после отправки контента. Просто документ, полученный на вашей стороне клиента, остается. Чтобы работать с эффектами на стороне клиента, вам нужно работать с JavaScript.
Для этого вы должны выбрать свою любимую библиотеку JavaScript и добавить прослушиватель событий для событий «keyup». Замените амперсанды на «и» и поместите текст замены обратно в поле. Mugur опубликовал ответ, который показывает вам, как это сделать.
Это ужасное решение на практике, потому что ваши пользователи будут кричать о кровавом правосудии, чтобы избавить их от такого ужасного пользовательского опыта. В итоге вы заменили входной текст чем-то, что им не нужно. Другие поисковые инструменты делают это, почему не ваш? Вы нажали клавишу Backspace, тогда что? Когда вы нажимаете на текст, вы, вероятно, теряете позицию курсора.
Мало того, вы лечите симптом, а не его причину. Посмотрите, почему вы делаете это:
Причина в том, что когда & вставляется в нашу базу данных, наша поисковая система выдает его и заменяет его на &, которое затем возвращает неверный результат (т.е. не тот результат, который включает &).
Нет, ваша база данных и поисковая система не делают такие вещи, как "отключение". Вы не знаете, что происходит, и пытаетесь лечить симптомы, а не узнаете причину и устраните ее. Ваше лечение симптомов создаст БОЛЬШЕ проблем в будущем. Не делай этого.
&
- это код сущности HTML. У каждого «особенного» персонажа есть один. Это означает, что ваша база данных также кодирует >
как >
, а также символы с акцентами в них (например, тексты на французском, немецком или испанском языках). Вы получаете "неправильные" результаты для всех этих.
Вы не показывали код, поэтому не получаете код. Но вот в чем твоя проблема.
Ваш код преобразует необработанный текст в коды сущностей HTML, где это необходимо, вы ищете по некодированной строке.
Вариант 1: устранить причину
Кодируйте текст поиска с помощью сущностей HTML, чтобы он соответствовал всем этим случаям. Сопоставьте персонажей акцента с их двоюродными братьями без акцента, чтобы поиск «francais» мог вернуть «français».
Вариант 2: устранить один симптом
Заменить строку для амперсандов на стороне клиента или сервера, ваш поиск прерывается на все остальные кодировки. Никогда не находите тексты типа «Боб> Салли». Никогда не находите "français".