Кодировка и декодировка специальных символов в email-адресах

При обработке данных, например из веб-форм, email-адрес может быть передан в искажённом виде. Рассмотрим типичный случай: в параметре URL вы видите ?email=email+chtoto@gmail.com, а сервер интерпретирует это как строку "email chtoto@gmail.com" с пробелом.

Это происходит из-за правил кодирования URL, где пробел заменяется на знак плюса (+) или на %20. Чтобы корректно работать с такими данными, необходимо выполнять кодирование и декодирование.

Как закодировать специальные символы

Для безопасной передачи в URL или других контекстах специальные символы в строке (такие как пробел, @, точка и др.) должны быть закодированы. Используйте функцию кодирования URL:

  • В JavaScript: используйте функцию encodeURIComponent('email chtoto@gmail.com'). Она преобразует пробел в %20, а символ @ в %40.
  • В PHP: применяйте функцию urlencode('email chtoto@gmail.com') или rawurlencode() для более строгого соответствия стандартам RFC.
  • В Python: воспользуйтесь модулем urllib.parse и функцией quote() или quote_plus() (которая заменяет пробелы на +).

Как декодировать закодированную строку обратно

Чтобы восстановить исходную строку из закодированного формата, выполните обратную операцию:

  • В JavaScript: используйте decodeURIComponent('email+chtoto%40gmail.com') для преобразования %20 или + обратно в пробел, а %40 - в @.
  • В PHP: примените функцию urldecode('email+chtoto%40gmail.com').
  • В Python: используйте urllib.parse.unquote() или unquote_plus() для обработки знаков плюса.

Важно использовать соответствующие пары функций (кодирование/декодирование) в рамках одного стандарта, чтобы избежать потери или искажения данных.