javascript
Coding時因為某些需求要在url後方加上參數傳值,傳送的值又正好是中文,那對方收到的就會變成像"%E4%B8%BB%E7%B7"的亂碼。
這其實是16進位編碼,URL在網路上只能以ASCII碼傳送,而ASCII就只有英、數字及特殊符號,因為沒有支援中文字體,因此將中文以UTF-8轉成16進位編碼。
那現在如果URL要傳中文的值該怎麼辦呢?
解碼就好啦!
encodeURI()能夠將中文字串以UTF-8轉成16進位編碼。
相反的,decodeURI()可以將其解碼。
範例:
encodeURI("中文");
// "%E4%B8%AD%E6%96%87"
decodeURI("%E4%B8%AD%E6%96%87");
// "中文"
當中文中含有特殊符號時,會發現使用encodeURI/decodeURI無法將其做編碼/解碼,這可能造成後續程式碼誤判為特殊指令而中斷剖析。
特殊符號包含 ; / ? : @ & = + $ , #
原因是encodeURI/decodeURI會假定輸入的是完整URI,因此它不會解碼屬於URI語法的字符。
若要連同特殊符號一起編碼/解碼,則必須使用encodeURIComponent/decodeURIComponents。
範例:
encodeURIComponent("https://xxx/JS: a_scripting");
// "https://xxx/JS%3A%20a_scripting"
decodeURIComponent("https://xxx/JS%3A%20a_scripting");
// "https://xxx/JS: a_scripting"
/* decodeURI()不會將特殊符號解碼 */
decodeURI("https://xxx/JS%3A%20a_scripting");
// "https://xxx/JS%3A a_scripting"
要注意!!若使用的話,選取要編碼/解碼的字段丟進去處理就可以了,不可將整個URL丟進去哦!
參考文獻: