javascript - 瀏覽器的解碼順序(html解碼、url解碼以及js解碼)

來源:互聯網
上載者:User
');">test

代碼如上,當參數input的值為:%26lt%5cu4e00%26gt的時候,點擊test文本,彈窗內容為:<一>
想知道,從輸入參數到彈窗的整個過程中瀏覽器是如何對%26lt%5cu4e00%26gt進行順序解碼的?

回複內容:

');">test

代碼如上,當參數input的值為:%26lt%5cu4e00%26gt的時候,點擊test文本,彈窗內容為:<一>
想知道,從輸入參數到彈窗的整個過程中瀏覽器是如何對%26lt%5cu4e00%26gt進行順序解碼的?

服務端收到請求,進入代碼邏輯處理時

input的值,被URLDecode,變為<\u4e00>
瀏覽器從服務端擷取的頁面資料就已經變成了<\u4e00>
此時通過查看頁面源碼(注意不是頁面右鍵點檢查元素)可以看到

test

瀏覽器在渲染的時候

作為URL的href字串 javascript:alert('<\u4e00>'); 被HTMLEntity解碼,變為

');">test

這一步可以通過在頁面上右鍵點擊test連結,選擇檢查元素,可以看出實際渲染出的dom元素

點擊test連結時

執行的其實是一句javascript代碼,其中有一個字串,'<\u4e00>',裡面有一個逸出字元\u4e00,對其進行逆轉義,由前置字元\u可知這是一個unicode編碼的轉義,將這6個位元組的字串'\u4e00'轉化為一個實際上佔3個位元組空間的unicode字元'一',此時整個字串佔用的記憶體空間為

< >
3c e4 b8 80 3e

如果你直接在代碼裡寫成 alert('<一>');,這個字串的內部儲存方式也是這樣的

最終渲染alert框時

由系統將上位元組碼,翻譯為可顯示的對應編碼的字元,渲染在螢幕上

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.