2012-01-30 13 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