如何避免使用ui-sref进行URL编码

时间:2016-04-05 13:02:55

标签: angularjs angular-ui-router

我有这样的链接:

<a ui-sref="someState(Param:'مثال')"> A localized param </a>

编译Angular-ui-router时,生成href,如下所示:

<a href="#!/Procuts/%D8%B2%DB%8C%D8%B1%20%D8%B2%D8%A7%D9%86%D9%88"> A localized param </a>

我该如何避免这种情况?

我的尝试: 使用$urlMatcherFactoryProvider

创建新类型
$urlMatcherFactoryProvider.type('decoded', {
    encode: function (item) {
        return decodeURIComponent(item) // i put this to decode personally
    },
    decode: function (item) {
        return decodeURIComponent(item);
    },
    is: function (item) {
        return true;
    }
});

2 个答案:

答案 0 :(得分:3)

这实际上发生在&#39; angular&#39;不是&#39; ngRoute&#39; ,角度力使用encodeURICompenent编码所有网址, 所以你需要在angular.js里面改变encodeUriQuery,这样就可以传递阿拉伯字符,而无需编码

function encodeUriQuery(val, pctEncodeSpaces) {
  var r = /[\u0600-\u06ff]|[\u0750-\u077f]|[\ufb50-\ufc3f]|[\ufe70-\ufefc]/;
  if(r.test(val)){
    return val.replace(/\s/g,'-');
  }else{  
  return encodeURIComponent(val).
             replace(/%40/gi, '@').
             replace(/%3A/gi, ':').
             replace(/%24/g, '$').
             replace(/%2C/gi, ',').
             replace(/%3B/gi, ';').
             replace(/%20/g, (pctEncodeSpaces ? '%20' : '+'));
  }
}

如果您正在使用缩小版本或者不想在此处查找代码,可以将猴子补丁复制并粘贴到代码中的任何位置

window.encode = window.encodeURIComponent;
window.encodeURIComponent = function(val){return /[\u0600-\u06ff]|[\u0750-\u077f]|[\ufb50-\ufc3f]|[\ufe70-\ufefc]/.test(val) ? val.replace(/\s/g,'-') : window.encode(val)};

注意部分replace(/\s/g,'-')它用短划线替换空格,因为在角度中它会导致某些问题在网址中有空格

答案 1 :(得分:1)

解决方案实际上非常简单 您可以在A上使用javaScript 355函数,就像魅力一样。

控制器中的

使用它

1
检查你看到的东西是这样的:     enter image description here  谷歌seo更好,谷歌更好地理解波斯语

但是当您点击网址中的链接时,您会看到这一点 enter image description here