[英]How to append encoded parameters to the url using javascript?
我有一個搜索輸入框,我將其數據附加到“#”之后的URL上,例如http://test.cl.com/#pqr xyz
(使用哈希避免重新加載頁面)。 它工作正常,但是我的數據沒有被編碼,因為空格未用+
或%20
代替。因此在附加之前,我正在使用encodeURI
函數,然后將該值附加到URL,但仍然在地址欄中有空格字符。 在分配之前,我已經檢查了是否要附加正確的值(通過警告prq%20xyz
)。
當前輸出: http://test.cl.com/#pqr xyz
: http://test.cl.com/#pqr xyz
所需輸出: 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>
地址欄顯示未編碼字符的事實並不表示您的數據未正確編碼。 Firefox(例如)可以並且將嘗試對URL地址中的字符進行解碼,以使其更易於閱讀(我想)。
即使您將手動輸入一些編碼字符,例如,導航至:
http://google.com?opt=test%20me%20or%20not
地址欄中可見的url將被“解碼”-您不會看到%20。
編輯:要獲取加號而不是%20,您可以在使用encodeURI之前手動替換空格:
var url = encodeURI("pqr xyz".replace(/\s/, '+'));
看看下面的帖子。 它具有一個測試表單,您可以在其中查看每個Javascript編碼函數的輸出:
http://www.the-art-of-web.com/javascript/escape/
關於這些技術也有很好的討論。
干杯,
我猜您在Firefox上運行了測試。 現代版本的Firefox不會在哈希URL中將空格字符編碼為%20
或+
。
您可以通過將帶空格的哈希添加到任何url來進行簡單的測試。
其他瀏覽器將自動將空間轉換為%20
,而不是現代Firefox。 而且它沒有任何問題,也不應在您的應用程序中造成任何問題。
如果您在使用解碼散decodeURI
或decodeURIComponent
-空間將被正確地解碼,所以應用程序會像用同樣的方式%20
。
最壞的情況是+
字符,而該字符不會被decodeURI
解碼回空格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.