Javascript:URL傳值,中文變亂碼 === ###### tags: `javascript` Coding時因為某些需求要在url後方加上參數傳值,傳送的值又正好是中文,那對方收到的就會變成像"%E4%B8%BB%E7%B7"的亂碼。 這其實是16進位編碼,URL在網路上只能以ASCII碼傳送,而ASCII就只有英、數字及特殊符號,因為沒有支援中文字體,因此將中文以UTF-8轉成16進位編碼。 那現在如果URL要傳中文的值該怎麼辦呢? 解碼就好啦!:smile: ### encodeURI/decodeURI encodeURI()能夠將中文字串以UTF-8轉成16進位編碼。 相反的,decodeURI()可以將其解碼。 範例: ```javascript encodeURI("中文"); // "%E4%B8%AD%E6%96%87" decodeURI("%E4%B8%AD%E6%96%87"); // "中文" ``` ### encodeURIComponent/decodeURIComponents 當中文中含有特殊符號時,會發現使用encodeURI/decodeURI無法將其做編碼/解碼,這可能造成後續程式碼誤判為特殊指令而中斷剖析。 :::warning 特殊符號包含 ; / ? : @ & = + $ , # ::: 原因是encodeURI/decodeURI會假定輸入的是完整URI,因此它不會解碼屬於URI語法的字符。 若要連同特殊符號一起編碼/解碼,則必須使用encodeURIComponent/decodeURIComponents。 範例: ```javascript 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" ``` :::danger 要注意!!若使用的話,選取要編碼/解碼的字段丟進去處理就可以了,不可將整個URL丟進去哦! ::: --- 參考文獻: * [mdn](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURI) * [雲騰訊-解决js url传值中文乱码问题](https://cloud.tencent.com/developer/article/1334325?from=15425&areaSource=102001.1&traceId=5k1VA1ZNnSsHE_WUZNv0N) * [Javascript: 網址亂碼如何處理](https://acupun.site/lecture/html5_CSS_javascript/7-code02.html)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.