一,出现乱码的原因分析

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 解决乱码的通用方法的更多相关文章

  1. tomcat配置解决乱码问题

    在服务器上,如果项目是Tomcat启动的,可以用以下方式的设置解决乱码问题: 方法1.在Tomcat的catalina.sh(或者catalina.bat)文件中,开头加入: set JAVA_OPT ...

  2. 解决乱码的方法是,在执行SQL语句之前,将MySQL以下三个系统参数设置为与服务器字符集character-set-server相同的字符集

    character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数据库字符集. characte ...

  3. Java中常用的解决乱码的几种方法

    乱码有时候是一个非常让人头疼的问题,这里就总结一下常用的解决乱码的方法. 只知道的用法,却不明白为什么这么用…… 一. 在Java代码中: request.setCharacterEncoding(& ...

  4. DataTable数据赋值给Model通用方法

    注:该文属本人原创,今后项目中发现该方法存在BUG会实时更新,转载记得附上原文出处,方便大家获得最新代码. 相信大家在做项目中,经常会根据不同的表new各种不同的Model,当需要对Model进行实例 ...

  5. http get/post解决乱码问题

    <form method="默认为get"-> <s:form mothod="默认为post"-> ================= ...

  6. hibernate学习笔记4---HQL、通用方法的抽取实现

    一.通用方法的抽取实现 由于hibernate中对增删改查的一切操作都是面向对象的,所以将增删改查抽取成通用方法,以满足不同的表的增删改查操作,简化jdbc代码. 具体例子如下: package cn ...

  7. mysql 使用set names 解决乱码问题的原理

    解决乱码的方法,我们经常使用“set names utf8”,那么为什么加上这句代码就可以解决了呢?下面跟着我一起来深入set names utf8的内部执行原理 先说MySQL的字符集问题.Wind ...

  8. Python字符串的encode与decode研究心得——解决乱码问题

    转~Python字符串的encode与decode研究心得——解决乱码问题 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“/xe4/xb8/xad/xe6/x96/x8 ...

  9. window安装mysql5.7解压版(解决乱码问题)

    ♣安装mysql两种方法 ♣下载mysql5.7解压版 ♣配置步骤 ♣解决服务无法启动 ♣解决乱码 1.安装mysql两种方法 MySQL安装文件分为两种,一种是msi格式的,一种是zip格式的.如果 ...

随机推荐

  1. 在树莓派上安装leanote

    作者:冥王星 "noright0@163.com" 前言 宿舍有个树莓派2B,连接到电视机,安装OSMC系统,USB接口连接移动硬盘一块,平时用来BT下载和看电影.美剧. OSMC ...

  2. 分治算法求乘方a^b 取余p(divide and conquer)

    传统的计算方法为循环n个a相乘.时间复杂度为O(n). 如用分治算法,效率可提升至O(lgn). 结合recursive有 double pow(int a, int n){ ) ; ) return ...

  3. LeetCode_Permutations

    Given a collection of numbers, return all possible permutations. For example, [1,2,3] have the follo ...

  4. Factorials 阶乘

    Description N的阶乘写作N!表示小于等于N的所有正整数的乘积.阶乘会很快的变大,如13!就必须用32位整数类型来存储,70!即使用浮点数也存不下了.你的任务是找到阶乘最后面的非零位.举个例 ...

  5. Populating Next Right Pointers in Each Node II 解答

    Question Follow up for problem "Populating Next Right Pointers in Each Node". What if the ...

  6. 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* ...

  7. POJ 1631 Bridging signals DP(最长上升子序列)

    最近一直在做<挑战程序设计竞赛>的练习题,感觉好多经典的题,都值得记录. 题意:给你t组数据,每组数组有n个数字,求每组的最长上升子序列的长度. 思路:由于n最大为40000,所以n*n的 ...

  8. javascript 将递归转化为循环

    function tco(f) { var value; var active = false; var accumulated = []; return function accumulator() ...

  9. python学习之路-1 python基础操作

    本篇所涉及的内容 变量 常量 字符编码 用户交互input 格式化字符串 python的缩进规则 注释 初始模块 条件判断 循环 变量 变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中 ...

  10. Linux系统守护进程详解ntsysv 可以关掉那些服务

    acpid, haldaemon, messagebus, klogd,network, syslogd  以上几个服务必须开启!其他的分析如下: 1.NetworkManager,NetworkMa ...