2012-01-30 12 views
0

私は現在、別のサイトで動作するuserscriptを書いています。 1つの機能はリンクを書き換えて1つのリンク先ページをスキップすることです。ただし、& -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

'decodeURI'を試してください – mgraph

+0

@Topener、あなたはdecodeURIComponentを2回適用するだけですか? –

答えて

1

& entityはそのUの中に組み込まれていますRLだから、それを置き換える以外は何もありません。

用途:

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

他の記号と同じことが起こる場合、これは適応可能な解決策のようには見えません。 –

+0

他の文字では発生せず、「&」は「記号」ではありません**エンティティ**これはHTMLの非常に特殊なものです。エンティティ(実際に使用されている)がURLのデリミネータ文字と重なり合っている場所のみが必要です。それはちょうど '&'で、他はありません。 –

関連する問題