本文针对数据库与系统编码不一致导致的JS动态输出列表乱码问题,分析了原有通过navigator.userAgent判断浏览器类型并拼接URL参数的复杂方案。该方案因逻辑繁琐且在多浏览器下仍出现乱码而失效。最终推荐在script标签中直接设置charset="utf-8"属性的简洁方法,有效解决了跨浏览器编码显示异常的问题。
背景与问题描述
当数据库采用UTF-8编码,而现有系统使用gb2312编码时,常会遇到编码不一致的问题。
一种常见的处理方式是使用<script>echo_script(url);</script>来动态加载脚本。
原有复杂实现方案
具体实现代码如下:
<script>
function echo_script(url){
var USERAGENT = navigator.userAgent.toLowerCase();
var bname = '';
var b = ['ie','msie','firefox','chrome','opera','safari','maxthon','mozilla','webkit'];
for(i in b){
if(USERAGENT.indexOf(b[i]) > -1){
bname = b[i];
break;
}
}
if(!bname)bname='other';
var ie8 = USERAGENT.indexOf('msie 8') > -1 ? 'ie8' : false;
var ie7 = USERAGENT.indexOf('msie 7') > -1 ? 'ie7' : false;
if(bname == 'firefox' || ie8 )
{
var enc = "no";
}
if(ie8){
bname = 'ie8';
}else if(ie7){
bname = 'ie7';
}
var tmp_ie8 = ie8 ? 'ie8' : 'no_ie8';
document.write("<script src='"+url+"&encode="+enc+"&browser="+tmp_ie8+"&browserv="+bname+"'><\/script>");
}
</script> 然而,这种方法导致在不同浏览器下依然出现乱码,带来了很大的困扰。
简化解决方案
其实有更简单的解决办法。
<script type="text/javascript" charset="utf-8" src="xx.com/xx.php"></script>
通过这种方式,乱码问题便不再出现。