我正在創建將被髮送到用戶的URL。用戶然後點擊該網址,該URL告訴我該用戶是誰。
因此,我使用base64編碼添加到此鏈接的所有數據。然而,當用戶點擊鏈接時,他被重定向到404頁面,因爲編碼後的url中有'/',而zend框架路由器找不到任何路由。
任何方式我可以壓制'/'?我試過htmlentities
,但它沒有奏效。
我正在創建將被髮送到用戶的URL。用戶然後點擊該網址,該URL告訴我該用戶是誰。
因此,我使用base64編碼添加到此鏈接的所有數據。然而,當用戶點擊鏈接時,他被重定向到404頁面,因爲編碼後的url中有'/',而zend框架路由器找不到任何路由。
任何方式我可以壓制'/'?我試過htmlentities
,但它沒有奏效。
我強烈建議Joe Riggs' Create URL Safe Encrypted String。
提供的代碼在程序中,但轉換爲OO非常簡單。我已經用它來做你正在做的事情,其中一些信息(通常是用戶的電子郵件和ID的散列)被編碼/加密以供用戶點擊以激活其帳戶。
你想看看這些功能的是url_base64_decode
和url_base64_encode
,其中某些字符被改寫爲安全網址(例如,刪除/
與~
替換它)。
[編輯]
這是我的類的基於上述碼的鍵盤:http://codepad.org/lzevA4k1
用法:
$cryptUtil = new RPK_Crypt();
$string = 'Unencrypted string';
$eString = $cryptUtil->encrypt($string);
$dString = $cryptUtil->decrypt($eString);
var_dump($dString == $string); //true
我認爲你需要網址編碼爲字符+
,/
和=
。嘗試在您的Base64編碼參數上使用urlencode()
。
PS:順便說一下,這將是改變:+
=>%2B
,/
=>%2F
和=
=>%25
404可以解碼我說的很久了。 – hakre
@hakre您發送給用戶的URL必須進行編碼。 – jurgemaister
如果base64字符串是路徑的一部分,三重編碼或不是,這只是不起作用。請參閱以下重複問題:http://stackoverflow.com/q/1374753/367456。 – hakre
替換'/'與不同的東西,例如'!'。然後在解碼之前再做相反的操作。請參閱http://en.wikipedia.org/wiki/Base64 - 您可能也想因爲使用'+'來做類似的事情。你的問題是獨立於zend框架,所以我把它從標題中刪除。在這裏看到一些指針:http://www.ruby-forum.com/topic/167232 – hakre
@hakre我不確定這不能用zend特定的結構解決。如果你告訴路由器接受什麼,例如,/controller/method /作爲參數,忽略它可以工作的任何特殊字符。我對Zend沒有任何經驗,但是這可以與大多數其他框架一起工作,這些框架可以讓你編寫自定義路線。 – jurgemaister
@jurgemaister:是的,從技術上講,我非常肯定你是對的,但不是對'+'字符。此*可能會破壞相對路徑(如果使用)。我建議首先將數據製作成一個明確的數據包,然後處理。也許更保守。但實際上更多的節省我會說,而不是你需要調整路由選擇的特殊解決方案,而是「正常工作」的東西。 – hakre