在angularjs中发送带有%字符的json时出现格式错误的uri错误
Posted
技术标签:
【中文标题】在angularjs中发送带有%字符的json时出现格式错误的uri错误【英文标题】:malformed uri error when sending json with % character in angularjs 【发布时间】:2020-03-08 07:20:33 【问题描述】:我在很多地方读到过格式错误的 URI 错误是因为 angularjs 用 encodeUriQuery
覆盖了 encodeURIComponent
。
有什么方法可以在我的控制器或组件中覆盖encodeUriQuery
而无需更改角度文件?
【问题讨论】:
在 URI 中发送 JSON 数据是不明智的。最好使用 POST 请求并在请求正文中发送 JSON。 【参考方案1】:encodeURIComponent
和 angular.$$encodeUriQuery
都正确编码 %
字符:
console.log(angular.$$encodeUriQuery("%"));
console.log(encodeURIComponent("%"));
<script src="//unpkg.com/angular/angular.js"></script>
%
字符是不允许的,并且不应出现在 URL/URI 中。
有些字符是不允许出现的并且永远不应出现在 URL/URI 中、保留字符(如下所述)以及在某些情况下可能会导致问题但被标记为“不明智”或“不安全”的其他字符。在RFC-1738 (URLs) 和RFC-2396 (URIs) 中清楚地说明了字符被限制的原因。请注意,较新的 RFC-3986(更新到 RFC-1738)定义了在给定上下文中允许哪些字符的构造,但较旧的规范提供了一个更简单、更通用的描述,说明哪些字符在以下规则中是不允许的。
URI 语法中不允许使用的排除 US-ASCII 字符:
control = <US-ASCII coded characters 00-1F and 7F hexadecimal> space = <US-ASCII coded character 20 hexadecimal> delims = "<" | ">" | "#" | "%" | <">
字符“#”被排除在外,因为它用于将 URI 与片段标识符分隔开。 百分号“%”被排除在外,因为它用于转义字符的编码。换句话说,“#”和“%”是必须在特定上下文中使用的保留字符。
——Which characters make a URL invalid?——this answer
【讨论】:
但在我的情况下,即使在发布请求中输入字符的文本区域中也会出现问题,该文本区域绑定在父对象字段的 ng-model 中。仍然在发送请求时,我收到格式错误的 URI 异常,这也只是在 weblogic 和 jboss 中,而不是在码头以上是关于在angularjs中发送带有%字符的json时出现格式错误的uri错误的主要内容,如果未能解决你的问题,请参考以下文章
Django:使用 ajax 查询(字符串/Json)时出现格式问题
用于 angularjs 网站的带有 json rpc 的节点服务器
将JSON字符串从IOS Native发送到Javascript(JSON.Parse)时出现Json Parse错误[重复]