2011-08-30 67 views
1

我有一個搜索輸入框,我將它的數據附加到「#」後面的URL,例如http://test.cl.com/#pqr xyz(使用散列來避免重新加載頁面)。它工作正常,但我的數據沒有被編碼,因爲空間不被替換爲+%20所以在添加之前,我使用encodeURI函數,然後將該值附加到URL,但仍然在地址欄中存在空格字符。在分配之前,我已經檢查過我正在追加正確的值(通過提醒prq%20xyz)。如何將編碼參數追加到使用JavaScript的URL?

電流輸出:http://test.cl.com/#pqr xyz 需要的輸出:http://test.cl.com/#pqr+xyz

請幫我找出概率的原因。謝謝!

<html> 
<head> 
<title>Test</title> 
    <script type="text/javascript" src="jquery1.6.js"></script> 
    <script type="text/javascript"> 
    $(document).ready(function(){ 

     $('#btn').click(function(){ 
      var url = encodeURI("pqr xyz"); 
       alert(url); // shows encoded value 
      window.location.hash = (url); 
     }); 
    }); 
    </script> 
</head> 
<body>   

     <h3>sample app</h3> 
     <button id="btn"> 
      append 
     </button> 


</body> 

+1

只是一個額外的評論:你不需要警告字符串或對象來確認內容或狀態。你可以使用console.log(url);它會彈出在谷歌瀏覽器和Firefox的控制檯(不知道IE瀏覽器)。 – mahulst

+0

無法理解:問題是什麼?在瀏覽器中替換地址欄中空格的「+」或「%20」?你真的很重要?有什麼不同? –

回答

1

的地址欄顯示的未編碼的字符,並不意味着你的數據不正確編碼的事實。 Firefox(例如)可以並將嘗試解碼URL地址中的字符,以使其更具人類可讀性(我猜)。

即使你輸入一些字符編碼的手工,例如導航到:

http://google.com?opt=test%20me%20or%20not 

的URL地址欄可見的將「解碼」 - 你不會看到20%。

編輯: 要獲得的加號而不是20%,你可以使用之前是encodeURI手動替換爲那些空間:

var url = encodeURI("pqr xyz".replace(/\s/, '+')); 
+0

如果gmail的工作正常。例如,假設您搜索了「pqr xyz」,那麼在url中會添加「pqr + xyz」(Firefox)。 – Rahul

+0

但是,這是瀏覽器地址欄中顯示內容的問題,還是訪問/操作數據時遇到問題? – WTK

+0

謝謝你的例子。我同意%20將不可見。所以在添加編碼參數後,如何實現像pqr + xyz這樣的格式(與gmail search或者stackoverflow搜索一樣)。在我的情況下,在URL空間將出現這是nt一個有效的url(不允許空格) – Rahul

1

我猜您運行在Firefox的測試。現代版本的Firefox不會將散列鏈接中的空格字符編碼爲%20+

你可以做一個簡單的測試,只需通過爲任何url添加一個帶空格的散列。

其他瀏覽器會自動將空間轉換爲%20,但不是現代的Firefox。並沒有什麼錯,它不應該在你的應用程序中產生任何問題。

如果您使用decodeURIdecodeURIComponent解碼散列 - 空間將被正確解碼,所以應用程序的行爲將與%20的行爲相同。

最糟糕的情況是+字符沒有被解碼回空格decodeURI