在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】:

encodeURIComponentangular.$$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 的节点服务器

如何在 iOS 中发送带有特殊字符的 JSON 字符串?

将JSON字符串从IOS Native发送到Javascript(JSON.Parse)时出现Json Parse错误[重复]

AngularJS 与 PHP:为啥我的应用程序无法保存输入文本发送的字符串?

向本地nodeJS服务器发出发布请求时出现AngularJS CORS错误