Продезинфицируйте адрес электронной почты
Предполагая следующий адрес электронной почты:
$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]
?
2 answers
Для дезинфекции, адреса электронной почты вы можете использовать функции preg_replace
iconv
:
$email = preg_replace('/[^a-z0-9+_.@-]/i', '', iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $email));
Важно, что вы убедитесь в том, что символы, входящие работающих в кодировке ожидается, будь то во время выполнения с помощью setlocale
, либо через переменные среды (ex.: , Apache):
, функция к функции 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]
Примечание: решение в этом ответе занимается только пробелы и подчеркивания. Специальные символы не удаляются.