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

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