【发布时间】:2011-02-18 22:34:30
【问题描述】:
我有一个电子邮件地址参数,其中电子邮件地址以未编码方式传递,如下所示:
http://domain/script?email=test+test@gmail.com
什么 PHP 转义/编码可以让我在页面的输入字段上安全地显示电子邮件地址?
我尝试的所有操作都会显示编码字符而不是用户友好的电子邮件地址(即 test%2Btest%40test.com)
更新 - 这是我尝试过的:
从 ?email=test+test@gmail.com 到:
urlencode($_GET['email']) = test+test%40test.com (@ sign is encoded)
htmlspecialchars($_GET['email']) = test test@test.com (lost the +)
htmlspecialchars(urlencode($_GET['email']) = test+test%40test.com (@ sign encoded)
回想一下,我正在尝试获取未编码的 url 电子邮件参数并将其安全地输出到输入字段的值中,同时保持加号不变。
也许我应该试试这个?
str_replace("%40", "@", htmlspecialchars(urlencode($_GET['email'])))
【问题讨论】:
-
最好的办法是先用urldecode,然后用htmlspecialchars :) $email = htmlspecialchars( urldecode( $_GET['email'] ) );现在你可以使用 $email ;)
-
不,我想你不明白。电子邮件地址未编码发送。
-
按照 ahmet2106 的指示尝试 htmlspecialchars。
-
这不起作用,因为加号仍会转换为空格。换句话说,输入字段看起来像“test test@gmail.com”。
-
它被转换为一个空格,因为 URL 中的
+代表一个空格。如果要保留空格等,则必须先对所有内容进行 URL 编码,然后再将其放入 URL。