2012-01-30 3 views
0

В настоящее время я пишу usercript, который работает на другом сайте. Одна из функций - переписать ссылки, чтобы вы пропустили одну целевую страницу. Однако, если в ссылке существует & -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

Это двойная кодированный, так что вы должны также дважды расшифровывает его. –

+1

try 'decodeURI' – mgraph

+0

@Topener, вы имеете в виду, что просто примените decodeURIComponent дважды? –

ответ

1

& entity построен прямо в этом U RL, так что для этого нет ничего, кроме как просто заменить его.

Использование:

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

Это не похоже на адаптируемое решение, если то же самое происходит с любым другим значком ... –

+0

Это не происходит с каким-либо другим символом, а '&' не является «знаком», это ** сущность ** - это очень специфическая вещь в HTML. Вам нужно только беспокоиться о том, что объекты (которые фактически используются) перекрывают символы разделителя для URL. Это просто '&' и никаких других. –