Angular2 get請求 加號轉(zhuǎn)為空格

之前,在開發(fā)的過程中诀黍,發(fā)現(xiàn)了一個很奇怪的問題袋坑,那就是關于get請求帶來的字符亂碼的問題,困擾了我很久眯勾,那就是在使用Get請求的時候枣宫,請求中帶了參數(shù) +,而后吃环,后臺無論如何都收不到這個+,只會顯示空格也颤,奇怪的是,當我把請求過來的URL完整打印出來時卻又是正確的郁轻,基本情況可以用下面的例子展示:

完整的get請求

http://www.test.com/test?a=21398+kjad

按道理翅娶,我后臺想收到的應該是:

21398+kjad

但實際上收到的卻是:

21398 kjad

出現(xiàn)這個問題后,本以為是前端的請求出了問題好唯,于是竭沫,在后臺把請求打印出來發(fā)現(xiàn),完整的URL并沒有變骑篙,依然是上面的請求:

http://www.test.com/test?a=21398+kjad

那么蜕提,是什么原因?qū)е碌哪兀?/strong>

后來網(wǎng)上查找了一下,發(fā)現(xiàn)很多人都遇到了和我一樣的問題靶端,其實谎势,這是一個歷史性的遺留問題凛膏,這篇博客這么寫道:

html中因為一些非標準的做法,將+等同于空格進行處理 (當Html的表單被提交時它浅,每個表單域都會被Url編碼之后才在被發(fā)送译柏。由于歷史的原因,表單使用的Url編碼實現(xiàn)并不符合最新的標準姐霍。例如對于空格使用的編碼并不是%20鄙麦,而是+號,如果表單使用的是Post方法提交的镊折,我們可以在HTTP頭中看到有一個Content-Typeheader胯府,值為application/x-www-form-urlencoded,大部分應用程序均能處理這種非標準實現(xiàn)的Url編碼)恨胚。

可以看到骂因,其實,當后端收到+后赃泡,會以為是空格的編碼寒波,從而將其轉(zhuǎn)換成了空格。(一般來講升熊,服務器會默認幫你做了這些處理的)

** Angular2中的坑 **
眼看著問題似乎解決了俄烁,于是乎,在Angular2中级野,我在使用params設置鍵值的時候页屠,將鍵值encodeUrlComponent了一下,本來準備坐等勝利的果實蓖柔,結(jié)果卻又仿佛一場噩夢:
后臺依然有空格3狡蟆!况鸣!

徘徊了許久牢贸、嘗試了多次,依然不行镐捧,百無聊賴潜索,只能看源碼了:
在使用URLSearchParams對象設置鍵值的時候,Angular2中的源碼對字符有如下處理:

function standardEncoding(v) {
    return encodeURIComponent(v)
        .replace(/%40/gi, '@')
        .replace(/%3A/gi, ':')
        .replace(/%24/gi, '$')
        .replace(/%2C/gi, ',')
        .replace(/%3B/gi, ';')
        .replace(/%2B/gi, '+')
        .replace(/%3D/gi, '=')
        .replace(/%3F/gi, '?')
        .replace(/%2F/gi, '/');
}

看到這兒愤估,真的忍不住想吐血帮辟,心里暗罵了angular2一百遍。
大家看出什么問題了嗎玩焰?
是的由驹,它把我辛辛苦苦轉(zhuǎn)化的%2B又給轉(zhuǎn)換回去了!!B并炮!

寫到這里,我真的沒有明白甥郑,Angular2為什么要這么做逃魄,浪費了我好多時間。

最后的解決方法也很簡單很暴力了澜搅,直接自己拼接encodeUrlComponent后的字符伍俘,不使用URLSearchParams對象。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末勉躺,一起剝皮案震驚了整個濱河市癌瘾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饵溅,老刑警劉巖妨退,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蜕企,居然都是意外死亡咬荷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進店門轻掩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幸乒,“玉大人,你說我怎么就攤上這事放典∈疟洌” “怎么了基茵?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵奋构,是天一觀的道長。 經(jīng)常有香客問我拱层,道長弥臼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任根灯,我火速辦了婚禮径缅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烙肺。我一直安慰自己纳猪,他們只是感情好,可當我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布桃笙。 她就那樣靜靜地躺著氏堤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪搏明。 梳的紋絲不亂的頭發(fā)上鼠锈,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天闪檬,我揣著相機與錄音,去河邊找鬼购笆。 笑死粗悯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的同欠。 我是一名探鬼主播样傍,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼铺遂!你這毒婦竟也來了铭乾?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤娃循,失蹤者是張志新(化名)和其女友劉穎炕檩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捌斧,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡笛质,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了捞蚂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片妇押。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖姓迅,靈堂內(nèi)的尸體忽然破棺而出敲霍,到底是詐尸還是另有隱情,我是刑警寧澤丁存,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布肩杈,位于F島的核電站,受9級特大地震影響解寝,放射性物質(zhì)發(fā)生泄漏扩然。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一聋伦、第九天 我趴在偏房一處隱蔽的房頂上張望夫偶。 院中可真熱鬧,春花似錦觉增、人聲如沸兵拢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽说铃。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間截汪,已是汗流浹背疾牲。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留衙解,地道東北人阳柔。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蚓峦,于是被迫代替她去往敵國和親舌剂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,941評論 2 355

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理暑椰,服務發(fā)現(xiàn)霍转,斷路器,智...
    卡卡羅2017閱讀 134,657評論 18 139
  • 22年12月更新:個人網(wǎng)站關停一汽,如果仍舊對舊教程有興趣參考 Github 的markdown內(nèi)容[https://...
    tangyefei閱讀 35,183評論 22 257
  • 我是個電視迷避消,也是個極容易就入戲的人,用時尚的說法就是淚點極低召夹。我看電視岩喷,真可謂憂傷了別人的憂傷,快樂了別人的快樂...
    qingxin333閱讀 342評論 0 0
  • 花飛监憎,花落纱意,飄搖在發(fā)間,香彌漫鲸阔。 緣深偷霉,緣淺,繞前世今生褐筛,輪回間
    栩辰徉閱讀 282評論 2 13
  • GCD中處理任務只有兩種形式: 同步執(zhí)行任務(Sync) 和 異步執(zhí)行任務(aSync) 示例代碼: Log結(jié)果:...
    ShenYj閱讀 239評論 0 1