1. 程式人生 > >js或jsp亂碼問題

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檔案,當前前提是,連線的是服務端檔案,我們就可以通過這樣的方式解決。