我期望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
预期的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组件(又名查询字符串参数)编码方法?
Angular(至少1.3)不仅使用encodeURIComponent,而且还更改了一些替换项(例如将“”更改为“ +”)。
这是解释原因的提交:https
:
//github.com/angular/angular.js/commit/9e30baad3feafc82fb2f2011fd3f21909f4ba29e
这是您在1.3源码中可以看到的:
/**
* This method is intended for encoding *key* or *value* parts of query component. We need a custom
* method because encodeURIComponent is too aggressive and encodes stuff that doesn't have to be
* encoded per http://tools.ietf.org/html/rfc3986:
* query = *( pchar / "/" / "?" )
* pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
* unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
* pct-encoded = "%" HEXDIG HEXDIG
* sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
* / "*" / "+" / "," / ";" / "="
*/
function encodeUriQuery(val, pctEncodeSpaces) {
return encodeURIComponent(val).
replace(/%40/gi, '@').
replace(/%3A/gi, ':').
replace(/%24/g, '$').
replace(/%2C/gi, ',').
replace(/%3B/gi, ';').
replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
}
注意pctEncodeSpaces
硬编码为true
;
这是您可以解码URI参数的方法
decodeURIComponent(val.
replace('@', '%40').
replace(':', '%3A').
replace('$', '%24').
replace(',', '%2C').
replace(';', '%3B').
replace('+', '%20'));
我正在使用Vuejs 2(网页包简单模板),我想知道如何在呈现模板之前编译模板。下面是我的代码: App.vue main.js 这就是我启动服务器时遇到的错误: 我还尝试了这个插件vue模板编译器,但没有成功。你能帮我把它弄好吗?提前谢谢。
我知道在香草ES6中,您可以编写一个,它扩展了一个函数类。这里解释了这一点。 React支持两个ES6类组件,通过扩展React。组件和功能组件。但是,当尝试扩展功能组件时,我遇到了以下错误。 我正在尝试编写一些扩展组件的代码,这些代码同时适用于ES6类组件和功能组件。我想写一个函数,返回一个组件,但不是一个高阶组件,我只想扩展和修改一些道具。 下面是一些我尝试过但不起作用的示例代码。这可能吗?我
我有一个自己的骆驼组件/endpoint,我在Spring Boot应用程序中成功地在许多路线中使用。我正试图迁移到骆驼夸克斯,并在我的应用程序中使用相同的路线。 在我的camel quarkus应用程序中,仅通过添加相关依赖项是不可能使用此组件/endpoint的:quarkus无法像Spring Boot那样发现此组件/endpoint。 显而易见的解决方案是编写一个在后台使用这个camel组
问题内容: 假设我在User结构中有一个密码字段。 我的客户通过一起发布用户名和密码来注册用户。因此,如果我将JSON解码为上述struct,它将忽略密码。可以预料的 但是我想知道是否只有编组时才能忽略字段。我检查了官方文档页面,但找不到任何东西。 https://golang.org/pkg/encoding/json/ 我可以在结构中添加一个额外的字段,但我首先需要知道是否可以使用JSON l
通过快捷键对组件进行快速复制,在其他场景粘贴使用 共分为三部 选中要复制的组件 按下 ctrl 键同时点击之前复制组件的图标 在任意场景中通过 Ctrl + V 键,进行粘贴 备注:如果没有按下 Ctrl 键点击复制组件的图标还是照常进行组件复制,不会将组件属性放置到剪切板中 DEMO
我正在使用报表工具编辑。Jasper文件。我正在更改参数的对齐方式左到中心,然后我保存该文件。它还生成“jrxml”文件。在我的Java代码中,我可以传递。jasper位置来打印一些项。但我的改变并不影响,旧的设计保持不变… 帮帮我,我怎么编辑和保存。贾斯珀??? public static JasperPrint CreateFundPrint(Ticket Ticket,HashMap map