1

すでにエンコードされた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の場所属性がものをエスケープするのを防ぐ方法はありますか?

4

2 に答える 2

1

クエリ文字列を呼び出す前に、クエリ文字列をデコードすることを検討location.replace()してください。

組み込みdecodeURIComponent関数を使用してこれを行うことができます。

于 2012-09-26T13:15:15.917 に答える