javascript的encodeURIComponent

本系列文章是本人學習相關知識時所積累的筆記,以記錄自己的學習歷程,也爲了方便回顧知識;故文章內容較爲隨意簡練,抱着學習目的來的同學務必轉移他處,以免我誤人子弟~

參考資料:
MDN:encodeURIComponent

工作中碰到問題:
某個元素的 background-image 的值 url() 中的值是經過 encodeURIComponent 處理的圖片路徑;如果圖片路徑中包含着英文括號()則 encodeURIComponent 無法將英文括號轉義,即 好123(2).jpg 只能變成 %E5%A5%BD123(2).jpg

問題就在於這樣的話圖片路徑被當成非法的,導致圖片無法在瀏覽器中顯示
查看了 MDN 文檔才知道,encodeURIComponent 會忽略字母、數字、(、)、.、!、~、*、'、-和_,所以給出一個較爲安全的辦法:

function fixedEncodeURIComponent (str) {
  return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
    return '%' + c.charCodeAt(0).toString(16);
  });
}

手動轉義,使用到項目中可以解決問題

注:,圖片存放在cdn上,屬於http請求,可能跟background-image的url加載圖片的方式有關

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章