2013-07-04 36 views
2

採取URL地址www.somesite.com/@user1不一致window.history.pushState URI編碼

如果我點擊包含鏈接,則@的百分比在地址欄編碼到%40一個良好的老式<a href...超鏈接。

如果我使用HTML5的window.history.pushstate("object or string", "Title", 'www.somesite.com/@user1')@ endocded - 它,而不是顯示爲一個「@」字符。

這種不一致性困擾着我。可能有辦法讓行爲一致嗎?

我已經考慮encodeURIComponent('www.somesite.com/@user1')爲pushstate網址,但這也編碼'/',我希望是<a href...超鏈接不編碼'@'符號。

+0

如果您需要href版本,請使用它。我的意思是,如果網址來自錨點,那麼抓取a.href將被解析,而a.getrAttribute(「href」)將是原始未編碼文本。你也可以document.createElement()一個新的A標籤,設置它的.href,然後讀取它的.href;結果會神奇地成爲有效和絕對的。 – dandavis

回答

0

使用encodeURIComponent讓javascript假定沒有特殊的HTTP字符可以忽略。 首先提取compnenet:

var url = "www.somesite.com/@user1"; 
var atPos = url.indexOf('@'); 
var urlComp= url.slice(atPos); //@user1 
url = url.slice(0, atPos); 
url += encodeURIComponent(urlComp); //"www.somesite.com/%40user1"