终结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′

哪本书是每个程序员都该阅读的?

本文是从 What is the single most influential book every programmer should read? 这篇文章翻译而来。

国外知名网站stackoverflow上有一个问题调查: 哪本书是对程序员最有影响、每个程序员都该阅读的书?, 这个调查已历时两年,目前为止吸引了153,432人访问,读者共推荐出了478本书(还在增加),其中最火的一本书《Code Complete》被顶了1306次。如果你是个程序员,你一定有兴趣看看这些书里你都看过几本,如果你一本没看过的话,我也不好说什么,也许你是个天 才,但我相信大多数人都知道,你在学校里根本学不到什么真正的工作中需要的知识,我们毕业后能帮助我们在公司中胜任工作的老师就是这些优秀的书籍,一本好 书可以改变一个人的一生。

下面是这个调查中排名靠前的书的一个简单的清单:

第一名:1306票《Code Complete (2nd Ed) by Steve McConnell》,中文版《代码大全(第二版)》,两届Software Jolt Award震撼大奖得主!

cover

 

第二名:1161票 《The Pragmatic Programmer》,中文版《程序员修炼之道》

The Pragmatic Programmer

 

第三名:689票 《Structure and Interpretation of Computer Programs》,中文版《计算机程序的构造和解释》

Structure and Interpretation of Computer Programs - 2nd Edition (MIT Electrical Engineering and Computer Science)

 

第四名:557票 《The C Programming Language》,中文版《C程序设计语言》

The C Programming Language Book

 

第五名:472票 《Refactoring: Improving the Design of Existing Code》,中文版《重构:改善既有代码的设计》

Refactoring: Improving the Design of Existing Code

 

第六名:472票 《Introduction to algorithms》,中文版《算法导论》

Introduction to algorithms cover image

 

第七名:430票 《The Mythical Man-Month》,中文版《人月神话》

The Mythical Man-Month: Essays on Software Engineering, Anniversary Edition (2nd Edition)

 

第八名:426票 《Design Patterns》,中文版《设计模式》

 

第九名:386票 《The Art of Computer Programming(First Volume Hardcover)》,中文版《计算机程序设计艺术第 (第一卷)》

http://www.aqee.net/wordpress/wp-content/uploads/2011/03/75dd9_programming_41T1XCAEE1L.jpg

 

第10名:353票 《Compilers: Principles, Techniques, and Tools 》,中文版《编译原理》

Compilers: Principles, Techniques, and Tools (2nd Edition)

 

第11名:329票 《Head-First Design Patterns》,中文版《Head First 设计模式》

 

当然了,这里的排名并不具有什么权威性,但绝对可以说都是好书,这11本外还有很多书虽然票数不是那么多,但大家估计都耳熟能详,比如 《Effective C++》(中文版《Effective C++:改善程序与设计的55个具体做法》),《Clean Code》(中文版《代码整洁之道》),《Effective Java》(中文版《Effective Java中文版(第2版)》等 。

记得有位先哲曾说过:一种编程语言的重要性并不在于语言本身,而是在于这种语言来体现出来的编程思维模式。所以说,并不是你用到的书才去读,读书是一种习惯。