【发布时间】:2011-02-24 02:58:59
【问题描述】:
我正在创建一个令牌,我将其作为页面上 url 的一部分传递。我使用 rawurlencode() 对字符串进行编码并将其作为令牌发送,但是,我发现当我解码收到的令牌(作为 URL 参数传递)时,我得到的字符串略有不同。
我的网址如下所示:/path/to/file.html?token=abcd123
这是我正在使用的代码的 sn-p。我在做任何明显错误的事情吗?如果做不到这一点,是否有更好的方法来创建(加密)令牌并将它们传递到 url?
<?php
//send
$raw = "some secret string";
$token = rawurlencode($raw);
//recieve
$data = rawurldecode($token);
?>
[编辑]
我已经删除了 enc(dec)ryption 功能 - 它们不是问题的原因 - 并且是一个红鲱鱼。我已将问题专门缩小到 rawurlencode/decode 在它们的工作方式上不是对称的。
一个 rawurlencoded 字符串在解码时会给出一个不同的字符串(类似的字符串,但缺少部分)。当然,在 URLS 的基础上不可能有错误——所以我一定做错了什么。问题是我无法发现它,而且到目前为止似乎也没有其他人能够发现它......
[附加信息]
我正在使用 Symfony Web 框架 (v1.3.8),它可能会通过在幕后编码和解码内容来处理请求。我将尝试直接从 $_POST 变量中获取 token 参数,看看 Symfony 是否是所有这一切的罪魁祸首。
【问题讨论】:
-
好的,我解决了这个问题。这实际上是我最后造成的一个问题。在调用 rawurlencode() 之前发生错误。
标签: php symfony1 urlencode urldecode