Продезинфицируйте адрес электронной почты


Предполагая следующий адрес электронной почты:

$email = "zuúl@ so.pt";

Пытался приступить к дезинфекции даже делают использование:

filter_var($email, FILTER_SANITIZE_EMAIL); // [email protected]

я также Попытался:

preg_replace('/[[:punct:]]/', '', $email); // zuúl sopt

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

Вопрос

, продезинфицируйте адрес email zuúl@ so.pt, переводя [email protected] ?

Author: Comunidade, 2014-10-21

2 answers

Для дезинфекции, адреса электронной почты вы можете использовать функции preg_replace iconv:

$email = preg_replace('/[^a-z0-9+_.@-]/i', '', iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $email));

Важно, что вы убедитесь в том, что символы, входящие работающих в кодировке ожидается, будь то во время выполнения с помощью setlocale, либо через переменные среды (ex.: , Apache):

 1
Author: Willy Stadnick, 2014-10-21 19:23:23

, функция к функции iconv (Английском языке), что позволяет сделать преобразование string charset указываю:

iconv('UTF-8', 'ASCII//TRANSLIT', "zuúl@ so.pt"); // zu?l@ so.pt

Теперь вам нужно указать, какой locale (Английском языке), где язык должен быть свернут, чтобы символы с диакритическими знаками не приводит ?:

setlocale(LC_ALL,'pt_PT.utf8');
iconv('UTF-8', 'ASCII//TRANSLIT', "zuúl@ so.pt"); // zuul@ so.pt

Наконец, относится это к первый ответ @Вилли Stadnick для удаления также пробелы:

setlocale(LC_ALL,'pt_PT.utf8');
preg_replace('/\s/', '', iconv('UTF-8', 'ASCII//TRANSLIT', "zuúl@ so.pt"));  // [email protected]

Примечание: решение в этом ответе занимается только пробелы и подчеркивания. Специальные символы не удаляются.

 0
Author: Zuul, 2017-04-13 12:59:43