Web开发
解决 PHP UTF-8 编码问题
1- PHP文件本身必须是UTF-8编码。不像Java会生成class文件,避免这个问题。
- PHP要输出头:header(“Content-Type: text/html; charset=UTF-8″)
- meta标签无所谓,有header所有浏览器就会按header来解析。(Leakon观点:我认为很有必要正确设置meta信息,搜索引擎会关心这个设置的)
- 所有外围都得用UTF-8,包括数据库、JavaScript、CSS。
- PHP本身不是Unicode的,所有substr之类的函数得改成mb_substr(需要装mbstring扩展);或者用iconv转码(基本上linux都装了,没装的话download、tar、make、make install,很简单的)
- 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′
(Leakon观点:默认存储引擎用MyISAM不一定很好,做数据存储我认为应该用InnoDB,根据数据,建MyISAM表用于查询操作,这种方案比较合适) - 在需要做数据库操作的php程序前面加上
mb_internal_encoding(‘utf-8′); - create table最后边加上ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin
(Leakon观点:我会选择COLLATE=utf8_general_ci,在对中文字段排序时,utf8_bin和utf8_general_ci结果是不一样的) - phpMyAdmin/config.inc.php
$cfg['DefaultCharset'] = ‘utf-8′;
$cfg['RecodingEngine'] = ‘iconv’; - phpAdmin导出数据时
把”二进制区域使用十六进制显示”的勾去掉
(Leakon观点:9、10两步似乎是针对旧版的phpMyAdmin,我用的是2.10.3,可以选择各种连接编码,不必每次改源文件)
以上是我从其他网站找到的PHP编码问题解决方案,有些帮助,并加上了自己的建议,请您指正。
IE 无法打开 pdf rar http协议 cache-control
0前两天在开发过程中遇到一个问题,用php做了一个下载文件的程序。
点击文件链接,如果是pdf、rar等类型的文件,浏览器会询问是打开还是保存。如果选择保存,把文件保存到硬盘上,就可以正常打开,但选择打开,就会出现问题,IE会提示“文档已损坏”。
反复检查问题,包括检查header的Content-type,都是正常的,没有问题,而且用Firefox不管是选择打开还是保存都正常。
以为是浏览器的问题了,后来,试着改了一下http头,加上了header(“Cache-Control:”),就可以解决了,里面不能使NO-CACHE。
看来在细节上,Firefox比IE考虑得更周到一些!
CSS 图片 垂直 布局 与文字对齐 vertical-align
2在 HTML 代码中,有时会需要在文字旁边加上一个图标。
默认情况,是图片置顶对齐,文字置底对齐,这样一来,文字和图片排列在一起就很难看,如图:

代码是:
更多
查一下CSS2手册,找到vertical-align的属性,可接受的参数值如下:
baseline |sub | super |top |text-top |middle |bottom |text-bottom |length
baseline : 将支持valign特性的对象的内容与基线对齐
sub : 垂直对齐文本的下标
super : 垂直对齐文本的上标
top : 将支持valign特性的对象的内容与对象顶端对齐
text-top : 将支持valign特性的对象的文本与对象顶端对齐
middle : 将支持valign特性的对象的内容与对象中部对齐
bottom : 将支持valign特性的对象的文本与对象底端对齐
text-bottom : 将支持valign特性的对象的文本与对象顶端对齐
length : CSS2 由浮点数字和单位标识符组成的长度值 | 或者百分数。可为负数。定义由基线算起的偏移量。基线对于数值来说为0,对于百分数来说就是0%。目前IE5尚不支持。请参阅长度单位
为了布局更好看,我选择了text-bottom,让文字与图片在同一水平线上,效果好多了:

代码如下:
只是在img标签中加入了vertical-align的css定义。
rss.png图片是网上找的,如果你想要,那就下载我提供的这个链接:
http://down.leakon.com/software/2007/10/rss.png

CVS 相关
0告诉 CVS 仓库放在哪里
有几种方法告诉 cvs 仓库的位置。一种方法是通过命令行显式指名仓库,具体方法是用 -d(表示“目录”)选项:
cvs -d /usr/local/cvsroot checkout yoyodyne/tc
你也可以给环境变量 $CVSROOT 设置绝对路径来代表仓库的位置,在本例中 $CVSROOT 被设置成 /usr/local/cvsroot。对于 csh 和 tcsh 用户,在 .cshrc 或 .tcshrc 文件中加入下面语句即可设置 $CVSROOT 的值:
setenv CVSROOT /usr/local/cvsroot
sh 与 bash 用户则应在他们的 .profile 或者 .bashrc 加入下面语句:
CVSROOT=/usr/local/cvsroot export CVSROOT
用 -d 指定的仓库将跨越环境变量 $CVSROOT。一旦你从仓库里检出了一份工作副本,那么它将记住仓库的位置(信息被记录在工作副本的 CVS/Root 文件里)。
用 -d 选项和 CVS/Root 文件都会跨越环境变量 $CVSROOT。如果 -d 选项和 CVS/Root 文件指定的仓库位置不同的话,则使用前者。当然,为了正确操作它们应该是引用同一仓库的两个方法。
xampp xdebug configure phpize php-config
9看标题,不太会理解这篇文章的主题,只不过是有着微妙关联的几个软件,按照时间顺序发生在了我的身上。
xampp,是一个集成的 apache + php + mysql + … 的开发环境,如果你是做 web 开发,对各种服务器软件的安装比较头疼,尤其是在 unix 下编译和配置各种软件没有经验的时候,这个软件就能帮大忙了。只要下载回去,解压到 /opt 目录下,然后
#/opt/lampp/lampp start 即可!
/opt/lampp/htdocs 就是你的 web 根目录,所有的环境都默认配好了。
通常,我都是在 vmware 里安装一个 FreeBSD 6,然后装这个 xampp,就立刻有了一个开发环境。
后来, 需要用 xdebug 调试 php 程序,Windows 版的超级简单,下载一个 DLL 文件即可,但 Unix 版的必须得在本机环境中编译才行。
以前编译过 apache 和 php 等软件,第一步都是在安装目录执行 ./configure ,但解压完 xdebug 发现根本没有这个文件,上网站查文档,发现需要执行 phpize。
百度了一把,大概了解到,phpize 是根据源码包中的好像是 config.m4 这个文件,生成 configure 脚本的,目前来说,我也就能领悟到这个层次了。还好,我查了 /opt/lampp 目录下面,有这个 phpize 文件,可以执行。执行完了,目录下面果然出现了 configure 文件,这个 configure 文件会调用 php-config。
php-config 可能就是获得当前 php 的各种环境设置变量的,在编译 xdebug 这种 php 扩展的时候会用到。
用 phpize 和 php-config 做好 configure 后,就要用 make 编译 xdebug 了。
这个时候,问题来了,屏幕刷刷地显示了几屏错误信息后,停在一个严重错误的提示信息下面 。
说是 xdebug 的语法错误。
我想,不会吧,这么出名的开源软件,都是经过很多测试的,不至于编译都过不去。然后自己检查前面的每一项错误信息,都是提示一些 .h 文件找不到,关键的几行是 php/include 目录,编译程序要在这个目录下面找文件,但是这个目录不存在!
这个提醒了我,由于我的 apache 和 php 环境是 xampp 打包的,目录结构和默认的不一样,而且很多文件也没有在系统中注册,是无法自动找到的。
我到朋友的服务器上测试了一下,他的软件都是一项一项安装的,基本都是默认目录。果然不出所料,在那里配置和编译都没有问题。
大概找到了问题的根源,然后在自己的虚拟机上重新安装了 apache 和 php,都是默认安装,然后,重新编译 xdebug,这回可以顺利通过了!
设置 innerHTML 属性 导致 未知的运行时错误 IE bug
2在用 Javascript 更改 HTML 代码的时候,经常会用到某个对象的 innerHTML。在读写标签内的代码或字符串时非常方便。
但 IE 对这个属性的支持不太好,经常容易报出 “未知的运行时错误”,而同样的操作,在 FireFox 和 Opera 下面就都没问题。
到百度和 Google 查了下,发现是 IE 浏览器下,对 <table>、<tbody> 和 <tr> 等标签的 innerHTML 属性进行写操作时会报错。
应该是 IE 处理不当造成的。
目前没有很好的解决办法,只能采取改变 HTML 结构的方式,也就是说,不要对 <table> 等标签应用这个属性,改为对 <div>、<span> 和 <p> 等标签,就没问题了。
比如,运行下面的代码会报错:
Hello Leakon!
改变一下实现方式,就没问题了:
Hello Leakon!
MySQL 数据导出 数据导入 备份 还原 编码 字符集
0数据导出
完整数据库备份
注意:
1 加上 “--opt” 参数,就相当于同时加上了如下参数:
2 必须指定字符集
通常选择 gbk、utf8 或 latin1
数据导入
注意:
1 导入导出的字符集应该一样(讨论A)
关于备份文件(讨论A)
用文本编辑器打开 database_dump.sql 文件,在头部会有如下一行内容:
其中的 gbk 就是导出时指定的字符集,在导入到新数据库的时候,这条语句会告诉 MySQL 服务器当前的连接环境使用这个指定的字符集。
简单总结:
为了整体环境一致,也为了维护工作更简单,我建议如下几点:
1 在设计数据库、表、字段的时候,要全部保持一致的字符集,例如,我们全部都用 utf8;
2 在 PHP 和 MySQL 建立连接的时候,用 "SET NAMES utf8" 语句设置连接环境;
3 在 Web 页面的 HTML 代码中加入如下代码:
4 保存程序和模板文件的时候也用统一的 utf8 字符集保存
保证了上述 4 点,我们在开发 Web 应用中,就不会遇到任何编码的问题了。
配置rewrite和.htaccess
0一、配置 apache 的 httpd.conf:
1.3.x 版本:
AddModule mod_rewrite.c
2.x 版本:
二、虚拟主机配置:
DocumentRoot “/www/abc.com”
ServerName www.abc.com
Options FollowSymLinks
AllowOverride Options FileInfo
