> 백엔드 개발 > PHP 튜토리얼 > php+mysql乱码问题求指导

php+mysql乱码问题求指导

WBOY
풀어 주다: 2016-06-23 13:33:34
원래의
896명이 탐색했습니다.

数据库环境:redhat AS5+mysql5.0.4   UTF8编码
WEB环境:win2003 nginx1.5 php5.2.17 页面时UTF8编码。
其他说明:一个应用程序(购买的)使用mysql5.0.4数据库,我现在用php写了一个网站用来显示数据库中的部分内容进行展示,其中一个字段是存储姓名的,,在页面上显示的时候是乱码,我用mysql管理工具查看的时候也是同样的乱码,以前我写这个网站的时候使用的是ASP.NET(C#)写的,当时是尝试了各种编码,最后确定ISO8599-1编码转UTF8可以正常显示。当时处理乱码的方法是用个函数转码,读取是转换到UTF8,现在PHP使用不熟,一直没找到解决办法,求指导
下面是我当初解决这个乱码问题的代码(C#),不知道怎么修改成PHP的,

        //读取是进行转换        private string ISO8599ToUTF8(string str)        {            Encoding UTF_8 = System.Text.Encoding.GetEncoding("utf-8");            Encoding ISO = System.Text.Encoding.GetEncoding("iso8859-1");            byte[] iso = ISO.GetBytes(str);            return UTF_8.GetString(iso);        }
로그인 후 복사


回复讨论(解决方案)

你先从数据库取出乱码字段的字段内容,比如保存到 $s
然后 echo base64_encode($s); 贴出结果

谢谢你的回复,你看显示的就是这个效果“ÕÛÒíÌìʹ”,肯定不会base64编码了

假设你的乱码内容在 $s 中,那么
echo base64_encode($s);
贴出结果

* 是这个吧?

你贴出的“乱码”的十六进制内码为  efbbbfc395c39bc392c3adc38cc3acc38ac2b9
其中 efbbbf 是 utf-8 字符集的 BOM 头
显然你在读取数据前执行了 set names utf8 指令
而 c395c39bc392c3adc38cc3acc38ac2b9 是 latin1 字符转换成 utf-8 编码的结果
latin1 (通用欧洲字符集1)就是 iso 8859-1
经过 iconv('utf-8', 'latin1', substr($s,3));
转码后得到的就是 * 其十六进制内码为 d5dbd2edcceccab9
显然是一个 gbk 编码的串

斑竹威武,谢谢

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿