我有这样的链接:
<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;
}
});
答案 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)