html頁面跳轉帶中文參數,亂碼


https://blog.csdn.net/xqhadoop/article/details/78235084

 

我們知道如果url地址中包含中文時,一般瀏覽器都會將其重新編碼成對應的字符。

一.URL編碼出現原因
URL 只能使用 ASCII 字符集來通過因特網進行發送。 也就是說URL只能使用英文字母、阿拉伯數字和某些標點符號,不能使用其他文字和符號 。這意味着 如果URL中有漢字,就必須編碼后使用。但是麻煩的是 標准的國際組織並沒有規定具體的編碼方法,而是交給應用程序(瀏覽器)自己決定。這導致”URL編碼”成為了一個混亂的領域。

二.URL編碼解決方案

Url編碼通常也被稱為百分號編碼,是因為它的編碼方式非常簡單,使用%百分號加上兩位的字符——0123456789ABCDEF——代表一個字節的十六進制形式。Url編碼默認使用的字符集是US-ASCII。例如a在US-ASCII碼中對應的字節是0x61,那么Url編碼之后得到的就是%61,我們在地址欄上輸入http://g.cn/search?q=%61%62%63,實際上就等同於在google上搜索abc了。又如@符號在ASCII字符集中對應的字節為0x40,經過Url編碼之后得到的是%40。

對於非ASCII字符,需要使用ASCII字符集的超集進行編碼得到相應的字節,然后對每個字節執行百分號編碼。對於Unicode字符,RFC文檔建議使用utf-8對其進行編碼得到相應的字節,然后對每個字節執行百分號編碼。如”中文”使用UTF-8字符集得到的字節為0xE4 0xB8 0xAD 0xE6 0x96 0x87,經過Url編碼之后得到”%E4%B8%AD%E6%96%87”。

詳細URL編碼信息http://www.cnblogs.com/jerrysion/p/5522673.html

三.中文參數編碼

瀏覽器中地址欄出現的中文參數在向后台提交參數時,瀏覽器會自動將中文進行編碼再向后台提交數據。

我們假設需要將a頁面中的參數傳遞中b頁面中。

a頁面如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<div id="main" style="width: 850px; height: 500px">
<a href="b.html?abc=南京">向b頁面傳遞參數</a>
</div>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
b頁面如下:

<html>
<meta charset="utf-8">
<script>
function getParams(key) {
var reg = new RegExp("(^|&)" + key + "=([^&]*)(&|$)");
//如果地址欄中出現中文則進行編碼
var r = encodeURI(window.location.search).substr(1).match(reg);
if (r != null) {
//將中文編碼的字符重新變成中文
return decodeURI(unescape(r[2]));
}
return null;
};
data=getParams("abc")
alert(data)
</script>
</html>
————————————————
版權聲明:本文為CSDN博主「xqhadoop」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/xqhadoop/article/details/78235084


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM