すでにエンコードされたURL文字列がDjango経由でHTMLテンプレートに印刷されています。これをlocation.replace()の呼び出しに配置すると、JavaScriptによってマングルされ、クエリ文字列=
に%
すでに存在しているため、後続のURL(ドメイン外)がそれをどう処理するかわからなくなります。
JavaScriptがそれを変更しないようにするにはどうすればよいですか?
編集:URL文字列の例:
'http://destination.com/?name=https%3A%2F%2Fexample.com%2F&nextparam=nextvalue'
上記をlocation.replace()に渡すと、次の場所にリダイレクトされます。
http://destination.com/?name%3Dhttps%253A%252F%252Fexample.com%252Fnextparam=nextvalue
これは明らかに間違っています。
URLには、クエリ文字列パラメータの1つとしてURLがあります。Djangoから渡される安全なエンコード文字は、文字列':/'の文字セットからのものであるため、基本的に' http://example.com/ 'は正しくエンコードされます。罰金。'=%&'はすべて、クエリ文字列の変更されていない部分です。
jsの外部で機能するエンコードされた文字列(アンカータグhrefなど)では、これは正しいURLにリンクしています。
しかし、リダイレクト時にwindow.locationに配置すると、クエリ文字列内のすべての文字がエスケープされ、何らかの理由で「&」が削除されます。「%」でさえ、qsの元のURLパラメータをエンコードするために使用されます。ソースを確認すると、文字列が上記のタグの文字列と同じであることがわかります。
リダイレクトの前にjavascriptの場所属性がものをエスケープするのを防ぐ方法はありますか?