2016-04-05 59 views
1

我有一個像這樣的鏈接:如何避免URL編碼與UI的SREF

<a ui-sref="someState(Param:'مثال')"> A localized param </a> 
編譯角UI路由器時

,生成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

其實這裏面發生的「角」而不是「ngRoute」,使用encodeURICompenent編碼的所有URL角應力, 所以你需要一個新的類型改變encodeUriQuery內部angular.js所以它將通過阿拉伯字符,而不編碼

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,'-')它替換空格與破折號,因爲在角它會導致一些問題,有空格在URL

+0

謝謝,真的感謝!這很神奇,你是怎麼發現的?我翻了一下'ng-route'。 –

0

這很簡單其實 您可以$scope.item.title對我來說就像魅力的工作使用JavaScript decodeURIComponent()功能的解決方案。

在控制器

使用它像

$state.go("single-page", { contentType: "portfolio", date: "139411", title: decodeURIComponent("اولین-نمونه-کار-تست") }); 

檢查你看到的是這樣的: enter image description here 其對谷歌搜索引擎優化更好,谷歌波斯語更好地理解這種方式

,但是當您單擊的鏈接url地方你看到這個 enter image description here

+0

可以請給我們一個樣品 –

+0

@HamedZakeryMiab我有更新的理由 –