我期待 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 组件
错误:意外请求: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 组件(又名查询字符串参数)编码方法?