统一编码
让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文件,当前前提是,连接的是服务端文件,我们就可以通过这样的方式解决。