Функция PHP urldecode () не будет работать для проверки электронной почты - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь декодировать письмо, так как оно было закодировано в URL, но функция urldecode() не расшифрует его.

Я также попробовал rawurldecode(), затем попытался сначала кодировать его сам изатем расшифровывает его, но он все равно закодирован как% 40 вместо знака @.

Вот код:

$isValid = ! User::emailExists(urldecode($_GET['email']));

Я получаю что-то вроде этого:

http://localhost/account/validate-email?email=some_email%40gmail.com

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

$ _ GET автоматически декодируется, вы уверены, что вы правильно кодируете URL в первую очередь?

Также помните, что вам следует обратить внимание и на кодировку URL-адреса для атрибута HTML, в который вы его поместили:

Возможно, вы используете двойную или неправильную кодировку!

0 голосов
/ 30 мая 2019

Я сделал простой тест:

<?php
$email = "some_email%40example.com";
var_dump($email);
var_dump(urldecode($email));
var_dump(rawurldecode($email));

(ожидаемый) вывод:

string (24) "some_email% 40example.com"

string (22) "some_email@example.com"

string (22) "some_email@example.com"

Таким образом, декодирование работает должным образом.

Может ли быть так, что вы смотрите на один пример, где то, что вы считаете %40, на самом деле является чем-то другим, например, последовательностью, которая содержит символ Unicode, только выглядит как теВы ожидаете, но на самом деле отличается?

...