我做了一个php个人网站,在本地浏览的时候一点问题都没有,上传到一个国外的服务器后发现有乱码问题,请高手帮我看看怎么回事。数据库及php文件本身都采用UTF-8编码,输出的网页也用meta和header()函数都指定UTF-8编码了。然后把信息从数据库读出来,用smarty放到网页里,一部分是直接赋给网页,还有一部分比如该页面的所有留言是赋给了一个JavaScript数组变量,就是赋给数组变量的这部分的中文全部变成了乱码,英文没问题。当然smarty再给JavaScript数组变量赋值之前我先将php的数组变量进行了JSON转换,我不清楚是不是这一步出的问题,相关代码如下:/**这是JSON类*/
class Json{
public static function encode($str){
$code = json_encode($str);
return preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $code);
}
public static function decode($str){
return json_decode($str);
}
}//输出页面时
$smarty->assign('message' , Json::encode($message_array)); //替换模板变量//js脚本
var comts=[##$message##] //这里我用[## ##]作为smarty变量标识
请高手给我解答一下吧!万分感谢!
class Json{
public static function encode($str){
$code = json_encode($str);
return preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $code);
}
public static function decode($str){
return json_decode($str);
}
}//输出页面时
$smarty->assign('message' , Json::encode($message_array)); //替换模板变量//js脚本
var comts=[##$message##] //这里我用[## ##]作为smarty变量标识
请高手给我解答一下吧!万分感谢!
问题出现在这
你从数据库里取出的数据是否为 ucs-2
嗯,问题确实出现在这里,我在程序里直接用json_encode代替Json::encode方法就没问题了,谢谢。不过我也试着把Json::encode里的iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))
改成iconv('UTF-8', 'UTF-8', pack('H4', '\\1')),似乎还是没用还有一点就是我本地的各种设置和服务器上是一样的,为什么原先在本地都没问题而在服务器上有问题呢,
如果是iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))这句的问题的话那本地的也该出现乱码才对啊?