2012-01-30 41 views
0

我目前正在編寫在另一個站點上運行的用戶腳本。一個功能是重寫鏈接,以便跳過一個登錄頁面。但是,如果鏈接中存在& -sign,我的函數將輸出爲&而不是&&-sign正在破壞我的鏈接重寫器

 $('a').each(function(index) { 
     var aLink = $(this).attr('href'); 
     if(aLink) { 
      if(aLink.indexOf("leave.php?u=") > 0) { 
       aLink = aLink.substring(38); 
       $(this).attr('href', decodeURIComponent(aLink)); 
      } 

     } 
    }); 

這是一個鏈接的一個例子是被破壞了:

https://www.site.com/exit.php?u=http%3A%2F%2Fsverigesradio.se%2Fsida%2Fartikel.aspx%3Fprogramid%3D104%26amp%3Bartikel%3D3406950 

是一個鏈接:

http://sverigesradio.se/sida/artikel.aspx?programid=104&artikel=3406950 

,而是成爲這個代替:

http://sverigesradio.se/sida/artikel.aspx?programid=104&artikel=3406950 
+1

這是雙重編碼的,所以你也應該雙解碼。 – 2012-01-30 13:14:01

+1

嘗試'decodeURI' – mgraph 2012-01-30 13:14:22

+0

@Topener,你的意思是就像應用decodeURIComponent兩次? – 2012-01-30 13:34:13

回答

1

& entity內置於該U RL,所以除了替換它之外沒有其他任何東西。

用途:

aLink = aLink.substring (38); 
aLink = decodeURIComponent (aLink); 
aLink = aLink.replace (/&/gi, "&"); 
$(this).attr ('href', aLink); 
+0

這似乎不是一個適應性的解決方案,如果相同的任何其他符號發生... – 2012-01-30 15:10:00

+0

它不會發生任何其他字符,並且'&'不是一個「符號」它是**實體** - 這是HTML中非常具體的東西。你只需要關心實體(實際使用的)在哪裏重疊URL的分隔符字符。這只是'&',沒有其他人。 – 2012-01-30 16:07:28