URL编码无法正常工作

时间:2010-12-08 01:18:24

标签: php

我正在编写我的第一个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会这样做,有没有人有任何解决方法的建议?

谢谢!

5 个答案:

答案 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中正确形成链接,您需要了解一些功能:urlencoderawurlencodehtmlentities。这是一个使用这三者的一个相当人为的例子:

<?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文档,您可以修复它!