6

AngularJS が標準の JavaScript 関数を使用してクエリ文字列パラメーターをエンコードすることを期待していましたencodeURIComponent。次のテストによれば、そうではありません。

describe('$http', function () {
 it('encodes uri components correctly', inject(function($http, $httpBackend) {
   var data = 'Hello from http://example.com';
   $httpBackend.expectGET('/api/process?data=' + encodeURIComponent(data));
   $http({ method: 'GET', url: '/api/process', params: { data: data } });
   $httpBackend.flush();
 }));
});

テストは次のエラーで失敗します。

$http は uri コンポーネントを正しくエンコードします
エラー: Unexpected request: GET /api/process?data=Hello+from+http:%2F%2Fexample.com
Expected GET /api/process?data=Hello%20from%20http%3A%2F% 2Fexample.com

総括する:

  • 予期されるエンコーディング:Hello%20from%20http%3A%2F%2Fexample.com
  • 実際のエンコーディング:Hello+from+http:%2F%2Fexample.com

AngularJS では、どの uri コンポーネント (別名クエリ文字列パラメーター) エンコーディング メソッドを期待する必要がありますか?

4

3 に答える 3

4

私の謙虚な意見では、AngularJS は URI パス セグメントと URI クエリ パラメータを同じ方法で誤ってエンコードしています。私にとってこれはバグであり、実際にそれを修正するためにプルリクエストを発行しました。

プル リクエストで紹介したテストでは、実際にこのバグを確認しています (AngularJS1.3.*と current の両方でテストしましたmaster)。

于 2015-06-24T10:08:54.637 に答える