网址编码无法正常工作

网址编码无法正常工作

问题描述:

我正在写我的第一个网络应用程序(仍然!),并且激活用户帐户时出现问题。网址编码无法正常工作

我设置的方式是新用户填写名称,电子邮件地址和所有的表单。他们提交它,我的应用程序发送一个链接到他们提供的电子邮件地址。他们点击该链接,通过(通过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/[email protected]&y=9c7b35bbdf1b0d24b0eda62f670c1456 

...它的工作。我可以看到差异是什么,但为什么gmail会这样做,并且没有人对解决方法有任何建议?

谢谢!

+0

你解码它回来吗? – 2010-12-08 01:24:57

+0

你如何发送你的电子邮件? – 2010-12-08 01:27:24

+0

我不解码它,我用phpmailer发送....是你的意思吗? – 2010-12-08 01:41:03

我建议你不要在任何Web服务器使用的空间在文件夹的名字,我认为这将解决您的错误404问题:

重命名PHP App FilesPHP_App_Files

而且我personnally不喜欢因为通常服务器使用高瓶盖与高瓶盖之间的区别。但这是个人习惯。

您还可以使用urlencode()urldecode()来处理您的URL参数。

尝试base64 encoding电子邮件中链接的电子邮件地址。然后,base64在处理验证的页面上解码它。

+0

谢谢 - 我会阅读base64编码,看看它是如何发展的。 – 2010-12-08 14:03:42

的解决方案是

$url ="some url"; 
$encoded = urlencode($url); 
$decoded = urldecode($encoded); 

这是一个完美的解决方案。

+0

感谢JapanPro。我在那里已经有'urlencode'了,我认为问题在于我的路上有空位,我不应该这样做。 – 2010-12-08 14:05:55

我敢打赌,问题是urlencode()将空格转换为+而不是%20。改为拨打rawurlencode()

PHP中的URL编码实际上很复杂。

为了在HTML中正确形成链接,您需要了解几项功能:urlencode,rawurlencodehtmlentities。这里有一个使用全部三个的相当人为的例子:

<?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), 
    '">'; 
?> 

'; ?>

您的问题是由不正确的编码引起的。希望通过这个例子和PHP文档你可以修复它!