出现乱码只有一个原因: 数据本身的编码和显示处理的编码不匹配.
具体为什么出现乱码, 原因可能会有很多种情况, 你提供的信息还不足以判断. 我简单给你提几个知识点, 你可以自己进行判断和查找
字符集: 计算机存储和传输字符串时,并不是存储和传输字符的形状, 而是字符对应的编码. 所谓编码,就是给每个字符设置一个编号, 这个编号是一个二进制的数字. 而这个字符和编号之间的对应规则集合就是字符集. 常用的字符集有 ASCII, gb2312,gbk和utf-8等等. 在显示字符时, 必须给计算机指定一种字符集, 以便让它把编号转换为字符进行显示. 每一种字符集, 对同一个字符设置的编号可能(不是一定)是不一样的, 显示的时候若使用错了字符集,找到的字符可能就是错误的或者是不存在, 那显示出来的内容就乱乱的了. 还有一种情况就是, 为了兼容, 后来制定的一些字符集,兼容了就的字符集, 某些字符的编号并没有改变. 例如字母和数字, 在ASCII字符集里的编号和在utf-8字符集里的编号就是一样的, 所有有时乱码里还能看到显示正常的字母和数字
文件字符集: 存储文件时使用的字符集, 文本文件的内容其实是字符对应编号的数据集合, 并没有真正存储字符. 所有编辑文件时得知道它的编码规则(字符集)才能还原显示出来. 相同的文件内容采用gbk和utf-8存储时, 其文件大小和内部的文件数据都是不一样的. 文件的字符集可以使用一些编辑查看和转换, 如notepad++
网页文件显示时使用的字符集: 浏览器显示网页时, 其实是把服务器上网页数据(字符的编号)读取下来,然后按一定的字符集显示. 这个在html代码里可以设置<meta charset="UTF-8">, 这是告诉浏览器使用utf-8字符集显示网页. 这个字符集一定要和网页数据字符集保持一致, 不然可能会有乱码. 若没有明确指定<meta charset="UTF-8">, 浏览器还会从http头信息里找字符集信息, php中可以使用 header("Content-type: text/html; charset=utf-8");设置头信息里的字符集. 若浏览器在这些地方都没有找到字符集, 那就会采用系统或浏览器默认的字符集
网页数据的字符集: 如果没有特殊的转换, 一般就是html或php文件使用的字符集. 但从数据库读取的数据, 字符集需要注意一下
数据库存储数据的字符集: 类似于文件字符集,数据库里存储的都是字符对应的编号, 创建数据表时没有明确指定的话, 会按一定规则使用数据库的默认字符集
连接数据库的字符集: 这相当于是告诉数据库, 连接数据库的客户端(PHP连接数据库时,php就相当于是数据库的一个客户端)使用的字符集, 这个字符集可以使用这个sql明确设定 "set names utf8", 若不设定, 则会使用一个默认字符集, 这与mysql的配置的有关. 这个字符集对读写行为有影响. 读取数据, 不管数据库存储数据的字符集是什么,都会自动转换位连接字符集后再返还给客户端, 写数据时,则会自动转化为存储字符集后再存储
所以,综上所述, 你可以重点检查一下一下几个字符集是否一致:
文件字符集
网页显示字符集
数据库连接字符集
好像不是这个编码的问题,是zend加密的问题
原来是这么会回事啊, 我弄错了. 这个解密我没研究过, 你得另外想办法了