“%”正在获取 URI 解码,而其他一切都没有
"%" is getting URI decoded while everyhting else not
我有一个奇怪的 UI5 问题。我从控件的绑定上下文创建一个字符串,如下所示:
Entity('Element%3AInfo%2CID')
仅供参考,解码后看起来像这样:Entity('Element:Info,ID')
但是,我从以下方法链中得到这个字符串:
oItem.getBindingContext().getPath().substr(1)
所以,整个(非常基本的)"navigate to" 块看起来像这样:
showElement : function (oItem) {
'use strict';
var bReplace = jQuery.device.is.phone ? false : true;
sap.ui.core.UIComponent.getRouterFor(this).navTo("element", {
from: "master",
element: oItem.getBindingContext().getPath().substr(1),
otherpattern: "something"
}, bReplace);
},
此块中的控制台日志 console.log(oItem.getBindingContext().getPath().substr(1));
提供了正确的字符串。
Console output of console.log(oItem.getBindingContext().getPath().substr(1)):
Entity('Element%3AInfo%2CID')
问题是(请注意,这越来越奇怪了)我的 URL 模式“{element}
”充满了:
Entity('Element%253AInfo%252CID')
解码:Entity('Element%3AInfo%2CID')
您可能已经知道,模式的“%”是经过编码的。我不明白为什么 UI5 会这样做。
你也应该知道我测试过的这些事实:
decodeURIComponent(oItem.getBindingContext().getPath().substr(1))
导致“Entity('Element:Info,ID')
”
encodeURIComponent(oItem.getBindingContext().getPath().substr(1))
导致“Entity('Element%25253AInfo%25252CID')
”
oItem.getBindingContext().getPath().substr(1).replace("%3A", ":")
导致“Entity('Element:Info%252CID')
”
这是一个错误吗?我的意思是,只要 URI 模式没有达到“%”,它就不会受到影响。 出于某种奇怪的原因,这个特殊字符被编码,而其他一切都无关紧要。
它不完全像“%”被编码而其他一切都没有被编码。
我也遇到了这个问题。 SAPUI5编码一次,browser编码第二次。因此,在第二次迭代中,您将只对“%”进行编码。
初始字符串:Element:Info,ID
第一次编码迭代后(通过 UI5 框架)encodeURIComponent('Element:Info,ID')
:我们得到 Element%3AInfo%2CID
所以对于第二次迭代,只剩下 % 需要编码 Element%253AInfo%252CID
因此我们得到了这个。
因此,如果您从 URL 中获取绑定上下文,则需要解码两次。
否则就像你做一次一样。
我有一个奇怪的 UI5 问题。我从控件的绑定上下文创建一个字符串,如下所示:
Entity('Element%3AInfo%2CID')
仅供参考,解码后看起来像这样:Entity('Element:Info,ID')
但是,我从以下方法链中得到这个字符串:
oItem.getBindingContext().getPath().substr(1)
所以,整个(非常基本的)"navigate to" 块看起来像这样:
showElement : function (oItem) {
'use strict';
var bReplace = jQuery.device.is.phone ? false : true;
sap.ui.core.UIComponent.getRouterFor(this).navTo("element", {
from: "master",
element: oItem.getBindingContext().getPath().substr(1),
otherpattern: "something"
}, bReplace);
},
此块中的控制台日志 console.log(oItem.getBindingContext().getPath().substr(1));
提供了正确的字符串。
Console output of console.log(oItem.getBindingContext().getPath().substr(1)): Entity('Element%3AInfo%2CID')
问题是(请注意,这越来越奇怪了)我的 URL 模式“{element}
”充满了:
Entity('Element%253AInfo%252CID')
解码:Entity('Element%3AInfo%2CID')
您可能已经知道,模式的“%”是经过编码的。我不明白为什么 UI5 会这样做。
你也应该知道我测试过的这些事实:
decodeURIComponent(oItem.getBindingContext().getPath().substr(1))
导致“Entity('Element:Info,ID')
”encodeURIComponent(oItem.getBindingContext().getPath().substr(1))
导致“Entity('Element%25253AInfo%25252CID')
”oItem.getBindingContext().getPath().substr(1).replace("%3A", ":")
导致“Entity('Element:Info%252CID')
”
这是一个错误吗?我的意思是,只要 URI 模式没有达到“%”,它就不会受到影响。 出于某种奇怪的原因,这个特殊字符被编码,而其他一切都无关紧要。
它不完全像“%”被编码而其他一切都没有被编码。
我也遇到了这个问题。 SAPUI5编码一次,browser编码第二次。因此,在第二次迭代中,您将只对“%”进行编码。
初始字符串:Element:Info,ID
第一次编码迭代后(通过 UI5 框架)encodeURIComponent('Element:Info,ID')
:我们得到 Element%3AInfo%2CID
所以对于第二次迭代,只剩下 % 需要编码 Element%253AInfo%252CID
因此我们得到了这个。
因此,如果您从 URL 中获取绑定上下文,则需要解码两次。 否则就像你做一次一样。