我正在编写我的第一个Web应用程序(仍然!),并且在激活用户帐户时遇到问题。
我设置它的方式是新用户填写一个包含姓名,电子邮件地址等所有内容的表单。他们提交,我的应用程序发送一个链接到他们提供的电子邮件地址。他们点击该链接,通过(通过GET)随机代码及其电子邮件地址 - 激活他们的帐户。
为了做一些调试,我想我会尝试使用不同的电子邮件服务。 Hotmail工作,我自己的电子邮件工作,但gmail没有。如果您点击gmail中的“激活”链接,则会弹出404 Not Found错误。所以我把问题缩小到如何编码链接。
这是gmail中的链接(不起作用):
mywebsite.com/PHP+App+Files/App1/ln_activate.php?x=userx%40gmail.com&y=9c7b35bbdf1b0d24b0eda62f670c1456
当我改变那个时:
mywebsite.com/PHP%20App%20Files/App1/ln_activate.php?x=userx@gmail.com&y=9c7b35bbdf1b0d24b0eda62f670c1456
......确实有效。我可以看到差异是什么,但为什么gmail会这样做,有没有人有任何解决方法的建议?
谢谢!
答案 0 :(得分:1)
我打赌问题是urlencode()
将空格转换为+而不是%20。请改为呼叫rawurlencode()
。
答案 1 :(得分:0)
尝试base64 encoding电子邮件中链接的电子邮件地址。然后,base64在处理验证的页面上对其进行解码。
答案 2 :(得分:0)
解决方案
$url ="some url";
$encoded = urlencode($url);
$decoded = urldecode($encoded);
这是完美的解决方案。
答案 3 :(得分:0)
我建议你不要在任何网络服务器的文件夹名称中使用空格,我认为这将解决你的错误404问题:
将PHP App Files
重命名为PHP_App_Files
另外,我个人不喜欢使用高帽,因为通常服务器会在低帽和高帽之间产生差异。但这是个人习惯。
您还可以使用urlencode()和urldecode()来处理您的网址参数。
答案 4 :(得分:0)
PHP中的URL编码实际上非常复杂。
为了在HTML中正确形成链接,您需要了解一些功能:urlencode,rawurlencode和htmlentities。这是一个使用这三者的一个相当人为的例子:
<?php
$query_string = 'foo=' . urlencode($foo) . '&bar=' . urlencode($bar);
echo '<a href="http://example.com/department_list_script/',
rawurlencode('sales and marketing/Miami'),
'?',
htmlentities($query_string),
'">';
?>
'; ?&GT;
您的问题是由不正确的编码引起的。希望通过这个示例和PHP文档,您可以修复它!