我试图弄清楚为什么我的消毒过滤器不起作用。输入不正确字符的电子邮件时,它将显示不正确字符的电子邮件。我以为它会去除不正确的字符,只显示正确的电子邮件地址。下面是我的代码。我在做什么错了?
<?php
if(filter_has_var(INPUT_POST, 'data')){
$email = $_POST['data'];
//Now remove illegal characters
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
echo $email;
}
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<input type="text" name="data">
<button type="submit">Submit</button>
</form>
答案 0 :(得分:2)
在我看来,这似乎行得通。但是,我不希望存储与实际输入不同的电子邮件。如果传入的电子邮件地址不正确,我将返回一条错误消息,要求用户提供真实的电子邮件地址:
#u
答案 1 :(得分:0)
我不知道这是否正是您要寻找的东西,只是尝试一下。
<?php
function filter_mail($string) {
return preg_replace('/[^A-Za-z0-9.@\-]/', '', $string); // We remove special chars and accept only Alphs&Nums&.&@
}
$mail="jp)(*&@gmail)**&.com";
echo filter_mail($mail); //This will output the desired email
echo "<br>";
echo $mail; //This is how it was !
?>
答案 2 :(得分:0)
这可能会有所帮助,消毒后我们需要检查它是否为有效邮件
<?php
if(filter_has_var(INPUT_POST, 'data')){
$regex = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/';
$email = $_POST['data'];
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
if (preg_match($regex, $email)) {
echo $email;
} else {
echo "invalid email";
}
}
?>
答案 3 :(得分:0)
似乎只能清理某些类型的字符。例如,以下是将被清除的错误电子邮件示例:
(comment)localpart@example.com-清理后:commentlocalpart@example.com “ much.more不寻常” @ example.com-消毒后:much.moreunusual@example.com
但是这些例如不会被消毒:
sarah {[@ gmail} {[。com-消毒后:sarah {[@ gmail}} {[。com jp*&@gmail**&.com-清理后:jp *&@ gmail **&。com