乱码!解决方案
程序员文章站
2024-01-17 18:42:52
...
乱码!!!
先说一下我的环境。
我的mysql用的是GBK编码。
我的php.ini里面也是默认使用GBK 我的httpd.conf文件里也是默认使用GBK
我的页面声明也是GBK,我的源码保存也是GBK。我不知道为什么我这么统一了编码,还会出现一个地方的乱码。
页面声明和保存格式都是GBK 我就不发图了。
然后呢我这个功能是做一个快速搜索客户。因为查询不到。我特意打印了一下这条语句。结果发现最后是乱码。请问是什么问题?
------解决方案--------------------
表单页面和处理页面是同一个文件吗? 编码不一致的缘故。
------解决方案--------------------
浏览器 页面默认的是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 gbk
utf-8 页面是 set names utf8
对于 AJAX 应用是 set names utf8
AJAX 应用一般使用现成的 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
------解决方案--------------------
ajax 发送请求的时候使用js函数 encodeURIComponent()
php 接受变量时候使用 urldecode()
最后iconv("UTF-8", "gb2312", $content)
先说一下我的环境。
我的mysql用的是GBK编码。
我的php.ini里面也是默认使用GBK 我的httpd.conf文件里也是默认使用GBK
我的页面声明也是GBK,我的源码保存也是GBK。我不知道为什么我这么统一了编码,还会出现一个地方的乱码。
页面声明和保存格式都是GBK 我就不发图了。
然后呢我这个功能是做一个快速搜索客户。因为查询不到。我特意打印了一下这条语句。结果发现最后是乱码。请问是什么问题?
------解决方案--------------------
表单页面和处理页面是同一个文件吗? 编码不一致的缘故。
------解决方案--------------------
浏览器 页面默认的是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 gbk
utf-8 页面是 set names utf8
对于 AJAX 应用是 set names utf8
AJAX 应用一般使用现成的 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
------解决方案--------------------
ajax 发送请求的时候使用js函数 encodeURIComponent()
php 接受变量时候使用 urldecode()
最后iconv("UTF-8", "gb2312", $content)
相关文章
相关视频
推荐阅读
-
javascript空白验证还是不行解决方案
-
PHP关于函数传中文值乱码的有关问题
-
乱码!解决方案
-
win下安装Redmine常见错误解决方案
-
安装SQL SERVER2000提示注册表文件被挂起的解决方案
-
PHP读取mssql json数据中文乱码的解决办法 mssql2005数据库 mssql2008安装教程 mssql数据库是什
-
函数in_array( ),第1个参数是数组,可以么?解决方案
-
PHP中路径问题的解决方案_php基础
-
javascript - 如何解决 header("WWW-Authenticate: Basic realm='你好'")弹框中中文乱码的问题?
-
面向MySQL数据构架梭子鱼负载均衡解决方案