tft每日頭條

 > 圖文

 > html亂碼如何處理

html亂碼如何處理

圖文 更新时间:2025-03-26 15:38:57
場景說明

假設需要劫持http響應并在html頁面中注入一段js代碼後再傳回浏覽器,實現在浏覽器出現一個彈框消息提醒。

html亂碼如何處理(如何實現注入html的中文不顯示亂碼)1

由于原始html頁面編碼格式存在UTF-8、GBK等多種編碼格式,如果注入的js包含中文消息的話,那麼在UTF-8或GBK編碼的頁面就會有一個出現亂碼。有沒有辦法做到不管是針對GBK、UTF-8編碼的頁面都能做到正常顯示而不會出現亂碼哪?

産生亂碼的原因

首先來分析一下産生亂碼的原因,我們在浏覽器看到的信息都是通過圖形學手段在顯示器上呈現出來的,而實際保存在計算機硬件上的都是0和1(因為計算機實現是基于二進制),那麼計算機要顯示、傳遞信息就需要依靠一套規則把一串串的0和1識别為正确的字符,這就是編碼。

例如01000001在ASCII編碼規則下對應字母A。相同的0/1串,不同的編碼解析出的字符一般是不同的,因此如果html頁面按照UTF-8的編碼解析正常,那麼按照GBK的編碼解析就會是亂碼了。根據上面的示意圖,假設注入的js代碼為utf-8編碼格式,而原始html編碼格式也為UTF-8編碼格式,那麼最終注入這部分中的中文就能正常顯示,但是如果原始html為GBK編碼,那注入的這部分js代碼的中文就會顯示亂碼。

解決辦法

有一種unicode統一編碼字符集,目标是把所有文字、字符統一編碼,也就是一串0/1組合在unicode字符集下對應的字符是唯一的,不會存在歧義。而js是支持解析unicode字符的,那麼就可以在注入js中把要顯示的消息統一轉換為unicode編碼,浏覽器端去解析這個unicode編碼,這樣不管原始html是UTF-8還是GBK,都能正常顯示中文。

原始注入js代碼關于中文字符的部分

// utf-8編碼格式 let message = "中文";

解決亂碼的注入js代碼關于中文字符的部分

// utf-8編碼格式 let message = "\\u4e2d\\u6587"; // 這個編碼對應上面的message"中文"

注意:

  1. 注入的js代碼仍然是utf-8編碼格式,隻是消息内容轉換為unicode編碼的形式;
  2. unicode中0x4e2d表示的0/1串對應漢字"中",0x6587對應的0/1串對應漢字"文";
  3. message其實也不是真正的unicode編碼,它隻是普通的字符串,隻是使用了unicode對應的碼點(也就是二進制對應的數值),因為可以利用這個碼點在浏覽器中恢複出正确的字符,事實上unicode字符集并沒有規定具體的編碼格式。

html亂碼如何處理(如何實現注入html的中文不顯示亂碼)2

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2025 - www.tftnews.com All Rights Reserved