php 解决乱码的通用方法
一,出现乱码的原因分析
1,保存文件时候,文件有自己的文件编码,就是汉字,或者其他国语言,以什么编码来存储
2,输出的时候,要给内容指定编码,如以网页的形势输入时<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
3,从数据库取出数据时,搞不清楚数据库,设置的字符集
4,以汉字为例,汉字本来也有编码的,一个汉字gbk要二个字符,而utf8要三个字符
上面说了有可能引起乱码的潜在原因,我现在把它们排列组合一下。
第一种情况,保存文件和显示编码的不一致
假如保存文件时候,你用的utf8编码,网页输出时,你设置的是gbk编码,这样就会出现乱码,
第二种情况,保存文件和数据库的存储的字符不一致
假如,保存文件的编码和网页显示的编码一样时,还是出现乱码了,例如,你保存文件时,用的utf8编码,而你数据库用的是gb2312字符集来存储数据。
第三种情况,已经乱码了,你还认为没有
当你发现出现乱码时,去改变保存文件的编码的时候,utf8情况是好的,当你把它换成gbk的话就乱码了,但是你还以为是好的。这也是出现乱码的原因。这种情况会经常出现。
第四种情况,数据库里面本来就是乱码
数据的字符集,保存文件的编码,网页显示编码都一样了,还是出现乱码了,这种情况大多数,是数据入数据库的时候,就乱码了,这种情况是比较麻烦的。
二,我解决乱码的方法,百试不爽
我把这种方法起个名子叫庖丁解牛法。哈哈。数据库,保存文件编码,显示时候的编码必须一致,并且以数据库为准
第一种,数据库和保存文件的编码是utf8,网页显示呢是gb2312,这个时候,我们就要改显示编码了<meta http-equiv="Content-Type" content="text/html; charset=utf8" />
第二种,数据库和网页显示都是utf8,保存文件用的是gb2312,这个时候呢,要注意一种,直接把保存文件的编码改过,是不行的,在改编码之前,把文件的内容先COPY一下,编码改过以后,在把刚才COPY的内容粘回去,这样就OK了.
第三种,数据库用的utf8,保存文件和显示编码是gb2312,这个时候呢,你可以用程序自带的函数把从数据库取出的数据进行一下转码把,utf8转成gb2312这样就不用去改变文件自己的编码了,以及显示编码了。以php为例,mb_convert_encoding($string,"gb2312","utf8");
第四种,数据库乱码,是数据录入时候,数据本身和数据库存储编码不一样造成的。例如:数据库的存储编码是utf8,在数据入库的时候,加上一个mysql_query("set names utf8;");
三,乱码表现的形势
乱码的表现呢,我是遇到过二个,
1)就是出现在的字体乱码了,变成怪七怪八的字符了
2)就是直接是空白页面,查看源码呢,什么都没有,像这种情况,有的时候,很想起是因为是乱码造成的。右击页面在,查看属性,改一下编码就知道是不是因为乱码引起的空白页面了。
php 解决乱码的通用方法的更多相关文章
- tomcat配置解决乱码问题
在服务器上,如果项目是Tomcat启动的,可以用以下方式的设置解决乱码问题: 方法1.在Tomcat的catalina.sh(或者catalina.bat)文件中,开头加入: set JAVA_OPT ...
- 解决乱码的方法是,在执行SQL语句之前,将MySQL以下三个系统参数设置为与服务器字符集character-set-server相同的字符集
character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数据库字符集. characte ...
- Java中常用的解决乱码的几种方法
乱码有时候是一个非常让人头疼的问题,这里就总结一下常用的解决乱码的方法. 只知道的用法,却不明白为什么这么用…… 一. 在Java代码中: request.setCharacterEncoding(& ...
- DataTable数据赋值给Model通用方法
注:该文属本人原创,今后项目中发现该方法存在BUG会实时更新,转载记得附上原文出处,方便大家获得最新代码. 相信大家在做项目中,经常会根据不同的表new各种不同的Model,当需要对Model进行实例 ...
- http get/post解决乱码问题
<form method="默认为get"-> <s:form mothod="默认为post"-> ================= ...
- hibernate学习笔记4---HQL、通用方法的抽取实现
一.通用方法的抽取实现 由于hibernate中对增删改查的一切操作都是面向对象的,所以将增删改查抽取成通用方法,以满足不同的表的增删改查操作,简化jdbc代码. 具体例子如下: package cn ...
- mysql 使用set names 解决乱码问题的原理
解决乱码的方法,我们经常使用“set names utf8”,那么为什么加上这句代码就可以解决了呢?下面跟着我一起来深入set names utf8的内部执行原理 先说MySQL的字符集问题.Wind ...
- Python字符串的encode与decode研究心得——解决乱码问题
转~Python字符串的encode与decode研究心得——解决乱码问题 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“/xe4/xb8/xad/xe6/x96/x8 ...
- window安装mysql5.7解压版(解决乱码问题)
♣安装mysql两种方法 ♣下载mysql5.7解压版 ♣配置步骤 ♣解决服务无法启动 ♣解决乱码 1.安装mysql两种方法 MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.如果 ...
随机推荐
- 在树莓派上安装leanote
作者:冥王星 "noright0@163.com" 前言 宿舍有个树莓派2B,连接到电视机,安装OSMC系统,USB接口连接移动硬盘一块,平时用来BT下载和看电影.美剧. OSMC ...
- 分治算法求乘方a^b 取余p(divide and conquer)
传统的计算方法为循环n个a相乘.时间复杂度为O(n). 如用分治算法,效率可提升至O(lgn). 结合recursive有 double pow(int a, int n){ ) ; ) return ...
- LeetCode_Permutations
Given a collection of numbers, return all possible permutations. For example, [1,2,3] have the follo ...
- Factorials 阶乘
Description N的阶乘写作N!表示小于等于N的所有正整数的乘积.阶乘会很快的变大,如13!就必须用32位整数类型来存储,70!即使用浮点数也存不下了.你的任务是找到阶乘最后面的非零位.举个例 ...
- Populating Next Right Pointers in Each Node II 解答
Question Follow up for problem "Populating Next Right Pointers in Each Node". What if the ...
- HDU 1576 A/B(数论)
题目:求(A/B)%9973,但由于A很大,我们只给出n(n=A%9973)(我们给定的A必能被B整除,且gcd(B,9973) = 1).数据给出n和b 推导过程 A/B = K K = 9973* ...
- POJ 1631 Bridging signals DP(最长上升子序列)
最近一直在做<挑战程序设计竞赛>的练习题,感觉好多经典的题,都值得记录. 题意:给你t组数据,每组数组有n个数字,求每组的最长上升子序列的长度. 思路:由于n最大为40000,所以n*n的 ...
- javascript 将递归转化为循环
function tco(f) { var value; var active = false; var accumulated = []; return function accumulator() ...
- python学习之路-1 python基础操作
本篇所涉及的内容 变量 常量 字符编码 用户交互input 格式化字符串 python的缩进规则 注释 初始模块 条件判断 循环 变量 变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中 ...
- Linux系统守护进程详解ntsysv 可以关掉那些服务
acpid, haldaemon, messagebus, klogd,network, syslogd 以上几个服务必须开启!其他的分析如下: 1.NetworkManager,NetworkMa ...