2012-08-28 79 views
1

我使用BASE64_ENCODE對返回的URL字符串使用,但是當我到達的頁面給它(使用BASE64_DECODE)解碼,它增加這個字符串的結尾:BASE64_DECODE加入奇怪的字符

-ZH

這裏的編碼字符串代碼:

$sess_refer = 'http://www.mysite.com/create-report.html?view=report&layout=reports&data=selection' 

<input type="text" name="referrer" id="referrer" value="<?php echo base64_encode($sess_refer); ?>" /> 

下面是該字符串解碼代碼:

$referrer = JRequest::getVar('referrer'); 
$sess_refer = base64_decode($referrer); 

它輸出這樣的:

http://www.mysite.com/create-report.html?view=report&layout=reports&data=selection-zh�� 

什麼我做錯了任何想法?

+0

你確定你沒有在urls中有一些非unicode gremlins,如果複製粘貼,它可以從一些類似ms字樣的程序中拾取一些看不見的垃圾,嘗試將它從頭開始重新輸入?也看看mbstring? – Alex

+0

使用$ _SERVER ['HTTP_REFERER']來抓取原始字符串,所以不應該有任何隱藏字符等等。我會查看mbstring函數:) –

+1

'zh'是一箇中文語言代碼在en-US語言環境中)......似乎非常巧合的是,「zh」和編碼範圍之外的字符神奇地一起顯示。 –

回答

1

這對於評論來說太長了,但如果它沒有幫助,我會刪除這個答案。

通過應用以下技巧,您可以使base64_encode()數據保持網絡安全。沒有它,+變成一個空間,可能會搞亂編碼。

strtr(base64_encode($s), '+/', '-_'); 

爲了解碼:

base64_decode(strtr($s, '-_', '+/')); 

更新

另外,HTTP_REFERER是由瀏覽器發送的,所以它應該作爲用戶輸入進行處理,並因此應該被消毒爲有效URL之前,你base64_encode()它。

+0

已經工作:)非常感謝你! –

+0

有錯誤,如' 警告:base64_decode()期望至多2個參數,3給出'@Jack – Jatin

+0

@Jatin在我的答案代碼不傳遞3個參數,只有1 –