可能是重复的问题:
在URL中传递base64编码的字符串
我正在创建一个URL,将其发送给用户。用户然后单击该URL,此URL告诉我用户是谁。
因此,我已使用base64编码将所有数据添加到此链接中。但是,当用户单击链接时,由于编码的URL中有'/',因此他被重定向到404页面,Zend框架路由器找不到任何路由。
有什么办法可以抑制'/'吗?我尝试过htmlentities
,但它没有起作用。
可能是重复的问题:
在URL中传递base64编码的字符串
我正在创建一个URL,将其发送给用户。用户然后单击该URL,此URL告诉我用户是谁。
因此,我已使用base64编码将所有数据添加到此链接中。但是,当用户单击链接时,由于编码的URL中有'/',因此他被重定向到404页面,Zend框架路由器找不到任何路由。
有什么办法可以抑制'/'吗?我尝试过htmlentities
,但它没有起作用。
我强烈推荐使用Joe Riggs' Create URL Safe Encrypted String。
提供的代码是过程式的,但非常容易转换为面向对象的。我已经用它来完成你正在做的事情,即对某些信息(通常是用户的电子邮件和ID哈希)进行编码/加密,以便用户点击以激活他们的帐户。
您需要查看的函数是url_base64_decode
和url_base64_encode
,其中某些字符被重写为URL安全字符(例如,删除/
并将其替换为~
)。
[编辑]
这里是基于上述代码的我的类的代码: http://codepad.org/lzevA4k1
用法:
$cryptUtil = new RPK_Crypt();
$string = 'Unencrypted string';
$eString = $cryptUtil->encrypt($string);
$dString = $cryptUtil->decrypt($eString);
var_dump($dString == $string); //true
我认为你需要对字符+
、/
和=
进行URL编码。尝试在Base64编码的参数上使用urlencode()
。
顺便说一下,这些将是更改:+
=> %2B
,/
=> %2F
和=
=> %25
/
替换为不同的字符,例如!
。然后再次执行相反的操作进行解码。请参考 http://en.wikipedia.org/wiki/Base64 - 由于+
的原因,您可能需要执行类似的操作。您的问题与 Zend 框架无关,因此我已从标题中删除它。在这里还可以找到一些指针:http://www.ruby-forum.com/topic/167232 - hakre+
字符。此外,这可能会破坏相对路径(如果使用)。我建议先将数据制成一个清晰的包,然后再处理它。也许更保守一些。但实际上更安全,而且不需要调整路由的特殊解决方案,只需使用“正常工作”的东西即可。 - hakre