js或jsp亂碼問題
統一編碼
讓jsp和js的編碼統一,在jsp裡宣告載入js的編碼格式,瀏覽器會按當前jsp的編碼格式解析引入js檔案。
jsp在引入js的中加入charset屬性
我遇到問題,修改專案中web.xml編碼設定
之前配encodingFilter過濾器時,沒有過濾到js
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.*</url-pattern>
</filter-mapping>
後來給為如下就好了
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
完整配置
<filter> <filter-name>encodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>crossDomainSessionSecurity</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>allowScriptTagRemoting</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name> allowGetForSafariButMakeForgeryEasier </param-name> <param-value>true</param-value> </init-param> </filter> <session-config> <session-timeout>30</session-timeout> </session-config> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
用伺服器語言宣告header頭資訊
這種方式是比較少見的一種方式,適合某些特定的情況。編碼資訊都是在頭資訊中宣告的。而js本身並沒有像html mate標籤這樣的宣告頭資訊的標籤,所以要藉助伺服器語言,我是學php的,其header(“Content-Type:text/html;charset=gb2312″);就可以宣告頭資訊,而如何寫這個js,就是把js內容寫在php檔案中,這裡就有一個知識點,就是js檔案並不一定非寫在js為字尾的檔案中,其實可以寫的伺服器檔案(php檔案等)中,php以<? ?>來包括服務端解析的程式碼,而之外的或者echo輸出的程式碼都會發送到客戶端,所以,我們將js程式碼寫到<??>外部或者直接echo出來,那麼這個js程式碼同樣可以起作用,這就是我們會發現,我們很多介面等程式,明明是script標籤,引入的卻是一個php檔案,或者其他的服務端檔案,就是這個道理,這樣來做,就更加的靈活了,因為我們可以藉助服務端語言,進行讀取資料庫等等更為複雜的操作,讓這個js程式碼更加多樣也更加靈活,實現更加複雜的功能,比如我們
1 |
<script type="text/jscript" charset="gbk" src="xx.php"></script> |
在這個xx.php寫
1 2 3 4 |
<? $ip = getenv('REMOTE_ADDR'); echo "alert($ip);"; ?> |
這樣我們訪問這個html頁面,就會彈出ip地址,我們就可以對他進行其他操作等。當然,既然是連線服務端檔案,就不能是直接雙擊開啟這個html了,一定是通過瀏覽器訪問才可以,或者是連線這個php檔案的src要寫http形式,目的就是保證這個php檔案要是通過伺服器解析訪問的,如果你這樣寫相對目錄的形式連線php,你直接開啟html,就相當於直接打開了這個php檔案,而不是通過http訪問的,這個php是不能被解析的。講的複雜了,但是這是一個很重要的知識點。如果單從亂碼而言,這種引用js檔案的方式適合我們已經引用了,不能再修改這個引用檔案了,比如我們在一些外鏈站發了文章,不能再修改了,那麼,我們可以修改連線的我們網站上的這個js檔案,當前前提是,連線的是服務端檔案,我們就可以通過這樣的方式解決。