zoukankan      html  css  js  c++  java
  • [转]终结PHP中文乱码的问题

    乱码总是出现在utf-8和gb2312(或者是gbk)纠缠不清的时候,因此,保证php网页不乱码的一个前提是php文件与静态网页的编码要一致

    1.使用utf-8编码的时候,php文件在所有输出之前加上:
    header(“Content-Type: text/html; charset=utf-8");
    静态页面添加:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">。
    所有文件的编码格式为utf-8。保存为utf-8可能会有点麻烦,类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM——Byte Order Mark)。它是一串隐藏的字符,用于让记事本等编辑器识别这个文件是否以UTF-8编码。对于一般的文件,这样并不会产生什么麻烦。

    但对于 PHP来说,PHP在设计时就没有考虑BOM的问题,不会忽略UTF-8编码的文件开头 BOM的那三个字符,会把BOM作为该文件开头正文的一部分。由于必须在<?或者<?php后面的代码才会作为PHP代码执行,所以将会造成在页面上输出这三个字符,显示效果就要看浏览器了,一般是一个空行或是一个乱码。由于受COOKIE送出机制的限制,在这些文件开头已经有BOM的文件中,COOKIE无法送出(因为在 COOKIE送出前PHP已经送出了文件头),所以登入和登出功能失效。一切依赖COOKIE、SESSION实现的功能全部无效。
    可用EmEditor来保存,在EmEditor中,另存为->去掉unicode签名(BOM)前的勾,再保存就可以去掉BOM信息了。

    2.使用gb2312编码,php文件在所有输出之前加上:
    header(“Content-Type: text/html; charset=gb2312"),
    页面添加
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    所有文件的编码格式为ANSI。

    二.PHP与数据库的编码应一致
    以Mysql数据库为例,在需要做数据库操作的php程序前加mysql_query("set names 'xx'");,如果php编码是gb2312那xx就是gb2312,如果是utf-8那xx就是 utf8(是utf8 而不是utf-8),这样操作数据时就不会出现乱码了。

    另外mysql最好用utf8编码,修改mysql配置文件 my.ini或my.cnf

    [mysql]
    default-character-set=utf8
    [mysqld]
    default-character-set=utf8
    default-storage-engine=MyISAM

    在 [mysqld]下加入:
    default-collation=utf8_bin
    init_connect='SET NAMES utf8'

    http://www.sky84.cn/index.php/article_content_id,142.html

  • 相关阅读:
    jquery获得url的get参数
    WampServer更改或重置数据库密码
    phpexcel乱码问题
    5kcrm增加权限管理中的模块(签到统计)
    windows关于定时执行的php脚本
    php 中引入邮箱服务 , 利用第三方的smtp邮件服务
    thinkphp 多个字段的不同关系的查询条件实现 .
    redis与memcached有什么区别
    MYSQL语句大全
    使用HttpClient工具类发起Restful API调用
  • 原文地址:https://www.cnblogs.com/greatwang/p/2648252.html
Copyright © 2011-2022 走看看