【发布时间】:2020-03-08 07:20:33
【问题描述】:
我在很多地方读到过格式错误的 URI 错误是因为 angularjs 用 encodeUriQuery 覆盖了 encodeURIComponent。
有什么方法可以在我的控制器或组件中覆盖encodeUriQuery 而无需更改角度文件?
【问题讨论】:
-
在 URI 中发送 JSON 数据是不明智的。最好使用 POST 请求并在请求正文中发送 JSON。
我在很多地方读到过格式错误的 URI 错误是因为 angularjs 用 encodeUriQuery 覆盖了 encodeURIComponent。
有什么方法可以在我的控制器或组件中覆盖encodeUriQuery 而无需更改角度文件?
【问题讨论】:
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 与片段标识符分隔开。 百分号“%”被排除在外,因为它用于转义字符的编码。换句话说,“#”和“%”是必须在特定上下文中使用的保留字符。
【讨论】: