"%"正在获得URI解码,而其他所有人都没有

时间:2015-05-29 06:40:26

标签: javascript uri sapui5 uriencoding

我有一个奇怪的UI5问题。我从控件的绑定上下文创建一个字符串,如下所示:

Entity('Element%3AInfo%2CID')

仅供参考,它看起来像是解码的:Entity('Element:Info,ID')

但是,我从以下方法链中获取此字符串:

oItem.getBindingContext().getPath().substr(1)

所以,整体(非常基本的)"导航到"块看起来像这样:

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.log的控制台输出(oItem.getBindingContext()。getPath()。substr(1)):   实体('元素%3AInfo%2CID&#39)

问题是(请注意,这很令人好奇)我的网址格式" {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模式保持不变,只要它没有来到"%"。 由于一些奇怪的原因,这个特殊字符被编码,而其他一切并不重要。

1 个答案:

答案 0 :(得分:1)

它不完全像“%”被编码,其他一切都没有被编码。

我也遇到过这个问题。 SAPUI5 执行一次编码,浏览器执行第二次编码。因此,在第二次迭代中,您只需编码“%”。

初始字符串:Element:Info,ID

首次迭代编码后(通过UI5框架)encodeURIComponent('Element:Info,ID'):我们得到Element%3AInfo%2CID

因此,对于第二次迭代,只剩下%编码Element%253AInfo%252CID,因此我们得到了这个。

因此,如果您从URL获取绑定上下文,则需要解码两次。 另外,你做的一次也没问题。