【轉義字符】HTML 字符實體< >: &等


在開發中遇到javascript從后台獲取的url 會被轉義,如:http://localhost:8080/Home/Index?a=14&amp;b=15&amp;c=123,想把它轉成http://localhost:8080/Home/Index?a=14&b=15&c=123

網上找了半天的解決方案:

轉義分為escapeHTML和unescapeHTML,先看兩個函數的實現。

js代碼:

 1 /**
 2  * @function escapeHTML 轉義html腳本 < > & " '
 3  * @param a -
 4  *            字符串
 5  */
 6 escapeHTML: function(a){
 7     a = "" + a;
 8     return a.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;").replace(/'/g, "&apos;");;
 9 },
10 /**
11  * @function unescapeHTML 還原html腳本 < > & " '
12  * @param a -
13  *            字符串
14  */
15 unescapeHTML: function(a){
16     a = "" + a;
17     return a.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&").replace(/&quot;/g, '"').replace(/&apos;/g, "'");
18 },

1,escapeHTML將< > & " '轉成字符實體 
使用場景: 
(1)用戶在頁面中錄入(比如輸入框) <script>alert(2);</script>, js將該內容提交給后端保存 
(2)顯示時,后端將字符串返回前端;js接收到之后: 
a, 使用escapeHTML,將字符串轉為 &lt;script&gt;alert(2);&lt;/script&gt;此時,瀏覽器將能正確解析,因為瀏覽器接收到實體字符后,轉成對應的尖括號等。 
b, 不使用escapeHTML,瀏覽器一看到<,便認為是html標簽的開始,直接把剛才的字符串當腳本執行了,這就是xss漏洞。 

2,unescapeHTML將字符實體轉成< > & " ' 
使用場景: 
后端將已經轉義后的內容顯示到頁面;比如&lt;script&gt;alert(2);&lt;/script&gt; 
js收到后: 
a,前端進行unescapeHTML,則可以直接dom操作,將標簽顯示到頁面。 
b,前端沒有unescapeHTML,則原樣輸出<script>alert(2);</script>,但此時並沒有執行。 

轉義字符: 

caefd511-7ae6-3a26-889a-1c741607510e.jpg (436×454)

提示:使用實體名而不是數字的好處是,名稱易於記憶。不過壞處是,瀏覽器也許並不支持所有實體名稱(對實體數字的支持卻很好)。

 


免責聲明!

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



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