PHP不乱码,数据库后台乱码 本帖最后由 susoft2008 于 2013-07-22 18:05:28 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Toad For MySQLPS:到处来cvs文件也是乱码的,中文啊。 你的数据库字段的连接校对是默认的 latin1 的你存入的数据是 utf-8 的你没有对 mysql 声明需要的字符集,所以 mysql 依然 latin1 取出数据。对于你来说就是 utf-8 了但是 mysql 管理工具是要声明所需字符集的,于是被当做 latin1 的 utf8 转换成 utf8 时就出现了乱码现象 PS:页面编码使用UTF-8数据库表编码使用UTF-8 这就对了,如果是 latin1 的应该是插不进去 utf-8 数据的。刚才我回复时还在想,你是怎么把数据插进去的但是这并不影响我给出的解释,只是环节有所提前而已mysql 默认的字符集是 latin1,一般也很少有人在安装 mysql 时改变默认字符集(多数人都不知道在哪里修改)的所以只要使用了非默认字符集操作 mysql 都必须在操作前执行 set names 字符集代码对于 utf-8 就是 set names utf8把以下代码用 utf-8 编码保存,然后运行一下<?phpheader('Content-type: text/html;charset=utf-8');echo iconv('latin1', 'utf-8', '供应商-西施');或把以下代码用 gbk 编码保存,然后运行一下<?phpheader('Content-type: text/html;charset=utf-8');echo iconv('latin1', 'utf-8', iconv('gbk', 'utf-8', '供应商-西施'));你都会看到这样的结果 有点理解不了,还是不知道问题出在哪了?数据库编码应该是UTP8, :“show variables like 'character_set_database';”---》返回UTF8@~~~~~~~~~~~ 关键是 character_set_server 的值 应用时发布在购买的虚拟主机上的,如何查看 character_set_server的值啊? show variables like 'character_set_server' 有点不合情理了,最后一招select BINARY supplier_ from tbl_name where id_=17echo base64_encode('取出的数据');贴出结果 结果如下图(该结果为数据库客户端的结果,PHP页面数据显示正常):PS:本帖主题内容中的2张图 --》图1 为PHP页面,显示正常;图2 为数据库客户端,显示乱码,到处cvs也是乱码 你给贴图有什么用?我要你用程序取出那个乱码的内容,并贴出其 base64 编码的值这样才好帮你分析 不乱码内容:使用BINARY 后的乱码内容: 我要你像这样的结果echo base64_encode($t);//w6fCscK7w6fCm8Kuw6XCm8Kb$t 是按 BINARY(二进制)方式读出的乱码字段的内容按图形对比(#7 的方法)你那个仍然是被当做 latin1 处理的 utf-8这些数据是你在修改字符集之前插入的吧? 不是的哦。。 字符集没有改过,供应商说不能改,应该是插入前没有设置数据库编码为UTF8.+QQ:252613934留下QQ讨论一下 有个网站能查出任何QQ都进了什么QQ群!怎么弄的数据库啊 PHP问题 大家帮帮忙 急 急!!!!!!!!! 关于一查询语句 发现个问题,关于AJAX的 wampserver安装问题 php 做类似于这个站,大概需要多少钱?或者以技术入股的形式加入我们? 在使用div网页中,当中间div的body内容变动时,怎么使最下边的另一个div的内容连动呀? 如何转换UTF-8为GB2312? 页面如何运行指定的函数 PHP发送电子邮件的问题,求解决 请问如何制作兩个"图片上传與显示缩图及描述"功能分開的網頁?
你存入的数据是 utf-8 的
你没有对 mysql 声明需要的字符集,所以 mysql 依然 latin1 取出数据。对于你来说就是 utf-8 了但是 mysql 管理工具是要声明所需字符集的,于是被当做 latin1 的 utf8 转换成 utf8 时就出现了乱码现象
PS:
页面编码使用UTF-8
数据库表编码使用UTF-8
但是这并不影响我给出的解释,只是环节有所提前而已
mysql 默认的字符集是 latin1,一般也很少有人在安装 mysql 时改变默认字符集(多数人都不知道在哪里修改)的
所以只要使用了非默认字符集操作 mysql 都必须在操作前执行 set names 字符集代码
对于 utf-8 就是 set names utf8
把以下代码用 utf-8 编码保存,然后运行一下<?php
header('Content-type: text/html;charset=utf-8');
echo iconv('latin1', 'utf-8', '供应商-西施');
或把以下代码用 gbk 编码保存,然后运行一下
<?php
header('Content-type: text/html;charset=utf-8');
echo iconv('latin1', 'utf-8', iconv('gbk', 'utf-8', '供应商-西施'));
你都会看到这样的结果
应用时发布在购买的虚拟主机上的,如何查看 character_set_server的值啊?
select BINARY supplier_ from tbl_name where id_=17echo base64_encode('取出的数据');
贴出结果
结果如下图(该结果为数据库客户端的结果,PHP页面数据显示正常):
PS:本帖主题内容中的2张图 --》图1 为PHP页面,显示正常;图2 为数据库客户端,显示乱码,到处cvs也是乱码
我要你用程序取出那个乱码的内容,并贴出其 base64 编码的值
这样才好帮你分析
不乱码内容:
使用BINARY 后的乱码内容:
echo base64_encode($t);//w6fCscK7w6fCm8Kuw6XCm8Kb
$t 是按 BINARY(二进制)方式读出的乱码字段的内容按图形对比(#7 的方法)你那个仍然是被当做 latin1 处理的 utf-8
这些数据是你在修改字符集之前插入的吧?
不是的哦。。 字符集没有改过,供应商说不能改,应该是插入前没有设置数据库编码为UTF8.
+QQ:252613934
留下QQ讨论一下