>백엔드 개발 >PHP 튜토리얼 >thinkphp3.1.3连接oracle返回json的奇怪编码有关问题

thinkphp3.1.3连接oracle返回json的奇怪编码有关问题

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-06-13 12:21:261042검색

thinkphp3.1.3连接oracle返回json的奇怪编码问题
环境:thinkphp3.1.3+oracle10.2g,oracle的是ZHS16GBK编码,已经可以顺利连接查数据,现在碰到一个奇怪的编码问题,服务器是apache+php5.4.33,第一次启动apache后,简单的一个select查询,无论用ajaxreturn还是php自带的json_encode(),返回的json中中文是乱码,但是再次刷新后就出现正确的中文显示,以后就一直是正常的,如果时间稍长,估计与数据库连接断开后,再次查又是乱码,再刷新又正常了。。。每次重新启动apache,第一次查询都会出现这个现象,已经试了用iconv或者mb_convert_encoding改返回json的编码,但是每次第一次查询都会有这个现象,将查询缓存成文件看了下,第一次的错误中文缓存的文件中是有中文的,不过编码是GB2312,删掉缓存文件,刷新后重新生成缓存,缓存文件的编码就变成utf-8了。。。试了下,如果不用tp框架,直接php用oci连数据库查询后,无论是第一次还是多少次出来的都是正确的中文。这个奇怪问题让人百思不得其解,高人帮忙啊。。。
------解决思路----------------------
第一次的错误中文缓存的文件中是有中文的,不过编码是GB2312,删掉缓存文件,刷新后重新生成缓存,缓存文件的编码就变成utf-8了

刷新后的内容是否与之前一样,只是编码变了?
------解决思路----------------------
1、thinkphp 使用 utf-8 字符集工作,并无 gbk 版本
2、json_encode 只支持 utf-8 中文
因此无论是传入还是传出都应是 utf-8 的,所以你连接 oracle 时声明 ZHS16GBK 是错误的。这是问题的根源

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.