乱码!!! 确认下浏览器的编码是否是gbk或者设置 页面 header("Content-type:text/html;charsert=gbk"); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我用show variables like 'character\_set\_%'; 查看了下我的编码 那几个utf-8是原因吗 浏览器 页面默认的是GBK编码吗 如果项目没要求个人还是觉得UTF-8编码比较好 统一成UTF-8编码 这种乱码样式是GBK与UTF-8冲突,修改一下就ok了,iconv你传过来的变量也行。url转码也行,修改文件编码也行。个人建议楼主研究一下大概的乱码问题,很多HTTP监视工具或者浏览器地址栏等在显示Url的时候会自动将Url进行一次解码(使用UTF-8字符集),这就是为什么地址栏显示的Url包含中文的缘故。但实际上发送给服务端的原始Url还是经过编码的 这与数据库的字符集无关显然你的查询页面使用了 ajax 提交你可能需要对传入传出的数据做转码处理,但不是必须的一般的说,数据库和表的字符集都是无关紧要的,只要字段的字符集是宽字符的就可以了何况如果:数据库服务是租用的,你不可能去修改数据库系统的默认字符集数据库是共享的(多人多个项目共用)你也不可能修改默认字符集去影响他人的工作你实际要做的工作是:根据应用场合变换工作字符集(set names 指令)对于 HTML 页面:gbk 页面是 set names gbkutf-8 页面是 set names utf8对于 AJAX 应用是 set names utf8AJAX 应用一般使用现成的 js 框架,比如 jquery他们总是以 utf-8 编码发送数据(通过 encodeURIComponent 函数)自己书写时,也要用 encodeURIComponent 编码发送的数据由于 AJAX 服务端总是接收到 utf-8 编码的数据,所以以 gbk 为基准的网站可能需要做如下处理:1、用 php 代码对传入的数据进行分析处理时,需做 utf-8 到 gbk 的转换2、传入数据直接应用于查询时,先执行 set names utf8 指令3、由 php 代码产生的 gbk 数据,可以转码成 utf-8 后输出 也可以在输出前先发送语言声明的头 header('Content-type: text/html;charset=GBK') 而不转码总之:mysql 可以自动将保存的数据的字符集转换成你需要的字符集浏览器的工作字符集是 unicode 能自动转换明确声明的任何字符集的内容到 unicode 我现在apache和my.ini包括php.ini 的默认字符都是GBK。我现在把整个文件的保存格式保存为GB2312 页面声明也是GB2312. 我尝试着修改我操作快速搜索的ajax文件。现在不乱码,但是直接没有任何输出的文字了。<?php header('Content-type: text/html;charset=gb2312'); $username = $_POST['username']; $cv = iconv('gb2312','utf-8',$user_name); include('config.php'); include('db.php'); $db = new db(); $db->connect($db_config); $sql = 'select id,true_name from users where user_type = 1 and true_name like "%'.$cv.'%"'; echo $sql;exit(); $rs = mysql_query($sql); $html = '<select name="user_id" style="width:100px;padding:5px;">'; $html .= '<option value="0">请选择客户</option>'; while (@$row=mysql_fetch_array($rs)) { $html .= "<option value=".$row['id'].">".$row['true_name']."</option>"; } $html .= '</select>'; echo $html;?> AJAX 传入的是 utf-8 的,所以要 $username = $_POST['username']; $cv = iconv('utf-8', 'gbk', $user_name);浏览器不区分 gbk 和 gb2312但 php 和 mysql 中 gbk 和 gb2312 是不同的,后者只是前者的子集 ajax 发送请求的时候使用js函数 encodeURIComponent()php 接受变量时候使用 urldecode()最后iconv("UTF-8", "gb2312", $content) php设置中国时区 求一PHP正则 ThinkPHP都有那些高级用法 php wordpress 的一个警告 请问这段php多图上传代码如何返回路径? 我想用 php 读取被人xml 然后实现分页该怎么做呢? jquery中如何使用ajax? 高手们来一起讨论跨域问题:要实现跨域(域和子域,如http://www.a.com 其子域有http://bbs.a.com http://mail.a.com 等等)有哪些方法呢? 第一次做项目——跪求各路高手指导 求ems快递查询代码 如何让自己的网站实现图片检索功能 thinkphp分页显示样式问题
这与数据库的字符集无关
显然你的查询页面使用了 ajax 提交
你可能需要对传入传出的数据做转码处理,但不是必须的一般的说,数据库和表的字符集都是无关紧要的,只要字段的字符集是宽字符的就可以了
何况如果:
数据库服务是租用的,你不可能去修改数据库系统的默认字符集
数据库是共享的(多人多个项目共用)你也不可能修改默认字符集去影响他人的工作你实际要做的工作是:根据应用场合变换工作字符集(set names 指令)
对于 HTML 页面:
gbk 页面是 set names gbk
utf-8 页面是 set names utf8
对于 AJAX 应用是 set names utf8AJAX 应用一般使用现成的 js 框架,比如 jquery
他们总是以 utf-8 编码发送数据(通过 encodeURIComponent 函数)
自己书写时,也要用 encodeURIComponent 编码发送的数据
由于 AJAX 服务端总是接收到 utf-8 编码的数据,所以以 gbk 为基准的网站可能需要做如下处理:
1、用 php 代码对传入的数据进行分析处理时,需做 utf-8 到 gbk 的转换
2、传入数据直接应用于查询时,先执行 set names utf8 指令
3、由 php 代码产生的 gbk 数据,可以转码成 utf-8 后输出
也可以在输出前先发送语言声明的头 header('Content-type: text/html;charset=GBK') 而不转码总之:
mysql 可以自动将保存的数据的字符集转换成你需要的字符集
浏览器的工作字符集是 unicode 能自动转换明确声明的任何字符集的内容到 unicode
我现在apache和my.ini包括php.ini 的默认字符都是GBK。我现在把整个文件的保存格式保存为GB2312 页面声明也是GB2312. 我尝试着修改我操作快速搜索的ajax文件。现在不乱码,但是直接没有任何输出的文字了。<?php
header('Content-type: text/html;charset=gb2312');
$username = $_POST['username'];
$cv = iconv('gb2312','utf-8',$user_name);
include('config.php');
include('db.php');
$db = new db();
$db->connect($db_config);
$sql = 'select id,true_name from users where user_type = 1 and true_name like "%'.$cv.'%"';
echo $sql;exit();
$rs = mysql_query($sql);
$html = '<select name="user_id" style="width:100px;padding:5px;">';
$html .= '<option value="0">请选择客户</option>';
while (@$row=mysql_fetch_array($rs)) {
$html .= "<option value=".$row['id'].">".$row['true_name']."</option>";
}
$html .= '</select>';
echo $html;
?>
$username = $_POST['username'];
$cv = iconv('utf-8', 'gbk', $user_name);浏览器不区分 gbk 和 gb2312
但 php 和 mysql 中 gbk 和 gb2312 是不同的,后者只是前者的子集
php 接受变量时候使用 urldecode()
最后iconv("UTF-8", "gb2312", $content)