嗨,我又来了同样的问题
<?php
$email="xyz@gmail.com";
$decode=urldecode($email);
?>
<FORM METHOD="get" ACTION="action1.php">
Type your first name: <INPUT TYPE="text" NAME="FirstName"> <br/>
Type your last name: <INPUT TYPE="text" NAME="LastName"> <br/>
Type your email:<INPUT type="hidden" NAME="email" value="<?php $decode; ?>">
<INPUT TYPE="submit" VALUE="Click and See">
</FORM>
我获得了网址重定向:http://example.com/action1.php?FirstName=jon&LastName=Kuri&email=xyz%40abc.com
但我需要http://example.com/action1.php?FirstName=jon&LastName=Kuri&email=xyz@abc.com
因为此处使用电子邮件用于用户名。所以说错了。
提前感谢您的帮助。
答案 0 :(得分:7)
这没有错......你错了。 URL中的保留字符必须编码为有效,或者它们不明确,并且可能在URL中用于其保留的目的。 @
是保留字符,必须编码为%40
。
PHP为您解码。这对你来说是透明的,你甚至不用担心它。
以下是您的参考:http://www.blooberry.com/indexdot/html/topics/urlencoding.htm#whatwhy
答案 1 :(得分:-1)
为什么你甚至首先解码$email
。要将字符串传递给URL,建议对它们进行编码,以便特殊字符不会混淆@
等保留字符。在PHP中,对URL进行编码和解码就像分别调用urlencode()
和urldecode()
一样简单。
由于您希望将电子邮件传递给URL,因此您应该对其进行编码而不是解码。
我已将您的代码修改为:
<?php
$email="xyz@gmail.com";
$encodedEmail=urlencode($email);
?>
<FORM METHOD="get" ACTION="action1.php">
Type your first name: <INPUT TYPE="text" NAME="FirstName"> <br/>
Type your last name: <INPUT TYPE="text" NAME="LastName"> <br/>
Type your email:<INPUT type="hidden" NAME="email" value="<?php $encodedEmail; ?>">
<INPUT TYPE="submit" VALUE="Click and See">
</FORM>
现在,只要您必须使用网址中的电子邮件地址,只需执行以下操作:
$decodedEmail = urldecode($_GET['email']); // It will return xyz@gmail.com as a string, decoded.
希望它能回答你的问题。