博客首页|TW首页| 同事录|业界社区
2011-08-05

VIM 代码折叠
VIM代码折叠方式可以用”foldmethod”选项来设置,如: set foldmethod=indent

有6种方式来折叠代码

1. manual //手工定义折叠
2. indent //用缩进表示折叠
3. expr  //用表达式来定义折叠
4. syntax //用语法高亮来定义折叠
5. diff   //对没有更改的文本进行折叠
6. marker //用标志折叠

vim 配置文件分为全局配置文件用户配置文件

1. 全局配置文件查找,在.vim 中输入:echo $VIM,一般为:/usr/share/vim/vimrc
2. 用户配置文件在用户主目录下,如:/home/abeen/.vimrc

在vimrc文件中设置折叠方式:如set foldmethod=indent

选定折叠方式后,就可以使用折叠命令进行折叠操作了.常用的折叠方式为indent和marker.

indent折叠命令
indent方式,vim会自动利用缩进进行折叠,我们可以使用现成的折叠成果.
我们可以在折叠处输入以下命令:

zc 折叠
zC 对所在范围内所有嵌套的折叠点进行折叠
zo 展开折叠
zO 对所在范围内所有嵌套的折叠点展开
[z 到当前打开的折叠的开始处。
]z 到当前打开的折叠的末尾处。
zj 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入。
zk 向上移动到前一折叠的结束处。关闭的折叠也被计入。

marker折叠命令
marker折叠方式时,我们需要用标计来标识代码的折叠,系统默认是{{{和}}}
折叠命令

zf 创建折叠,比如在marker方式下:
zf56G,创建从当前行起到56行的代码折叠;
10zf或10zf+或zf10↓,创建从当前行起到后10行的代码折叠。
10zf-或zf10↑,创建从当前行起到之前10行的代码折叠。
在括号处zf%,创建从当前行起到对应的匹配的括号上去((),{},[],<>等)。
zd  删除 (delete) 在光标下的折叠。仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。
zD  循环删除 (Delete) 光标下的折叠,即嵌套删除折叠。仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。
zE  除去 (Eliminate) 窗口里“所有”的折叠。仅当 ‘foldmethod’ 设为 “manual” 或 “marker” 时有效。

2011-07-27

server {
listen       80;
server_name localhost;
root   /data/www/mywp;

access_log  /data/logs/mywp.log  main;

location / {
index  index.php index.html index.htm index.shtml;
}

location ~ \.php(/|$) {
include        fastcgi.conf ;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
}

2011-07-25

一般模式:移动光标的方法
h或 向左方向键(←) 光标向左移动一个字符
j 或 向下方向键(↓) 光标向下移动一个字符
k或 向上方向键(↑) 光标向上移动一个字符
l或 向右方向键(→) 光标向右移动一个字符

如果想要进行多次移动的话,例如向下移动 30行,可以使用 “30j”或 “30↓”的组合按键,亦即
加上想要进行的次数(数字)后,按下动作即可!

[Ctrl] + [f] 屏幕『向下』移动一页 ,相当于 [Page Down]按键 (常用 )
[Ctrl] + [b] 屏幕『向上』移动一页 ,相当于 [Page Up] 按键 (常用 )
[Ctrl] + [d] 屏幕『向下』移动半页
[Ctrl] + [u] 屏幕『向上』移动半页
+  光标移动到非空格符的下一列
-  光标移动到非空格符的上一列
n<space> 那个 n表示『数字』 ,例如 20。按下数字后再按空格键 ,光标
会向右移动这一行的 n个字符。例如 20<space>则光标会向后面
移动 20个字符距离。
0  这是数字『 0』 :移动到这一行的最前面字符处 (常用 )
$  移动到这一行的最后面字符处 (常用 )
H  光标移动到这个屏幕的最上方那一行
M  光标移动到这个屏幕的中央那一行
L  光标移动到这个屏幕的最下方那一行
G  移动到这个档案的最后一行 (常用 )
nG  n为数字。移动到这个档案的第 n行。例如 20G则会移动到这个
档案的第 20行 (可配合 :set nu)
gg  移动到这个档案的第一行 ,相当于 1G啊 ! (常用 )

n  <Enter>n为数字。光标向下移动 n行(常用)
一般模式:搜寻与取代
/word  向光标之下寻找一个字符串名称为 word的字符串。例如要在档案内搜寻 vbird这个字符串,就输入 /vbird即可! (常用)
?word  向光标之上寻找一个字符串名称为 word的字符串。

n  这个 n是英文按键。代表『重复前一个搜寻的动作』的意思。举
例来说,如果刚刚我们执行 /vbird去向下搜寻 vbird这个字符串,则按下 n后,会向下继续搜寻下一个名称为 vbird的字符串。

N  如果是执行 ?vbird的话,那么按下 n则会向上继续搜寻名称为vbird的字符串!
这个 N是英文按键。与 n刚好相反,为『反向』进行前一个搜寻动作。 例如 /vbird后,按下 N则表示『向上』搜寻 vbird。

:n1,n2s/word1/word2/g
n1与 n2为数字。在第 n1与 n2行之间寻找 word1这个字符
串,并将该字符串取代为 word2 !举例来说,在 100到 200行
之间搜寻 vbird并取代为 VBIRD则:
『:100,200s/vbird/VBIRD/g』。(常用)
:1,$s/word1/word2/g
从第一行到最后一行寻找 word1字符串,并将该字符串取代为
word2 !(常用)
:1,$s/word1/word2/gc
从第一行到最后一行寻找 word1字符串,并将该字符串取代为
word2 !且在取代前显示提示字符给使用者确认 (conform)是否
需要取代!(常用)

一般模式:删除、复制与贴上

x, X  在一行字当中,x为向后删除一个字符 (相当于 [del] 按键), X为向前删除一个字符(相当于 [backspace]亦即是退格键) (常用)

nx  n为数字,连续向后删除 n个字符。举例来说,我要连续删除 10个字符,『10x』。
dd  删除游标所在的那一整列(常用)

ndd  n为数字。 删除光标所在的向下 n列,例如 20dd则是删除 20列 (常用)
d1G  删除光标所在到第一行的所有数据
dG  删除光标所在到最后一行的所有数据
d$  删除游标所在处,到该行的最后一个字符
d0  那个是数字的 0 ,删除游标所在处,到该行的最前面一个字符
yy  复制游标所在的那一行(常用)
nyy  n为数字。 复制光标所在的向下 n列 ,例如 20yy则是复制 20列 (常用 )
y1G  复制光标所在列到第一列的所有数据
yG  复制光标所在列到最后一列的所有数据
y0  复制光标所在的那个字符到该行行首的所有数据
y$  复制光标所在的那个字符到该行行尾的所有数据
p, Pp  为将已复制的数据在光标下一行贴上 ,P则为贴在游标上一行 !举例来说 ,我目前光标在第 20行 ,且已经复制了 10行数据。则按下 p后 ,那 10行数据会贴在原本的 20行之后 ,亦即由 21
行开始贴。但如果是按下 P呢 ?那么原本的第 20行会被推到变成 30行。 (常用 )
J  将光标所在列与下一列的数据结合成同一列
c  重复删除多个数据 ,例如向下删除 10行 ,[ 10cj ]
u  复原前一个动作。 (常用 )
[Ctrl]+r 重做上一个动作。 (常用 )

这个 u与 [Ctrl]+r是很常用的指令!一个是复原,另一个则是重做一次~利用这两个功能按键,
您的编辑,嘿嘿!很快乐的啦!

.  不要怀疑!这就是小数点!意思是重复前一个动作的意思。 如果您想要重复删除、 重复贴上等等动作,按下小数点 『.』就好了! (常用)
进入编辑模式

i, I插入:在目前的光标所在处插入输入之文字,已存在的文字会向后退;其中, i为『从目前光标所在处插入』, I为『在目前所在行的第一个非空格符处开始插入』。 (常用)

a, Aa为『从目前光标所在的下一个字符处开始插入』, A为『从光标所在行的最后一个字符处开始插入』。(常用)

o, O这是英文字母o的大小写。o为『在目前光标所在的下一行处插入新的一行』 O为在目前光标所在处的上一行插入新的一行!; (常用)

r, R取代:r会取代光标所在的那一个字符;R会一直取代光标所在的文字,直到按下 E SC为止;(常用)
上面这些按键中,在 vi画面的左下角处会出现『–IN SERT–』或『–REPLACE–』的字样。
由名称就知道该动作了吧!!特别注意的是,我们上面也提过了,你想要在档案里面输入字符时, 一定要在左下角处看到 IN SERT/REPLACE才能输入喔!
Esc退出编辑模式,回到一般模式中(常用)

指令列命令模式
:w将编辑的数据写入硬盘档案中(常用)

:w!若档案属性为『只读』时,强制写入该档案。不过,到底能不能写
入,还是跟您对该档案的档案权限有关啊!
:q离开 vi (常用)
:q!若曾修改过档案,又不想储存,使用 !为强制离开不储存档案。

注意一下啊,那个惊叹号(!) 在 vi当中,常常具有『强制』的意思~

:wq储存后离开,若为 :w q!则为强制储存后离开 (常用)
:e!将档案还原到最原始的状态!
ZZ若档案没有更动,则不储存离开,若档案已经经过更动,则储存后

离开!
:w [filename]将编辑的数据储存成另一个档案(类似另存新档)
:r [filename]在编辑的数据中,读入另一个档案的数据。 亦即将 『filename』

这个档案内容加到游标所在行后面
:n1,n2 w [filename] 将 n1到 n2的内容储存成 filename这个档案。
:! command暂时离开 vi到指令列模式下执行 command的显示结果!例如
『:! ls /home』即可在 vi当中察看
/home底下以 ls输出的档案信息!
:set nu显示行号,设定之后,会在每一行的前缀显示该行的行号
:set nonu与 set nu相反,为取消行号!

2011-07-23
##查看系统版本
[root@s1 ~]# cat /etc/redhat-release
CentOS release 5.4 (Final)
##yum 安装svn
[root@s1 ~]# yum install subversion -y
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: mirrors.163.com
* base: mirrors.163.com
* extras: mirrors.163.com
* updates: mirrors.163.com
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package subversion.i386 0:1.6.11-7.el5_6.4 set to be updated
---> Package subversion.x86_64 0:1.6.11-7.el5_6.4 set to be updated
--> Finished Dependency Resolution
Dependencies Resolved
================================================================================
Package           Arch          Version                   Repository      Size
================================================================================
Updating:
subversion        i386          1.6.11-7.el5_6.4          updates        3.1 M
subversion        x86_64        1.6.11-7.el5_6.4          updates        3.2 M
Transaction Summary
================================================================================
Install      0 Package(s)
Update       2 Package(s)
Remove       0 Package(s)
Total download size: 6.4 M
****ing Packages:
(1/2): subversion-1.6.11-7.el5_6.4.i386.rpm              | 3.1 MB     00:00
(2/2): subversion-1.6.11-7.el5_6.4.x86_64.rpm            | 3.2 MB     00:00
--------------------------------------------------------------------------------
Total                                           5.0 MB/s | 6.4 MB     00:01
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
Updating       : subversion                                               1/4
Updating       : subversion                                               2/4
Cleanup        : subversion                                               3/4
Cleanup        : subversion                                               4/4
Updated:
subversion.i386 0:1.6.11-7.el5_6.4    subversion.x86_64 0:1.6.11-7.el5_6.4
Complete!
[root@s1 ~]#
##创建svndata svnpasswd目录
[root@s1 usr]# mkdir -p /usr/data/{svndata,svnpasswd}
[root@s1 usr]# cd data/
[root@s1 data]# ll
总计 16
drwxr-xr-x 2 root root 4096 07-28 01:44 svndata
drwxr-xr-x 2 root root 4096 07-28 01:44 svnpasswd
##启动SVN服务 指定服务的SVN根目录
[root@s1 data]# svnserve -d -r /usr/data/svndata/ --pid-file=/usr/data/svndata/svn.pid
##查看 SVN 进程:
[root@s1 data]# ps -ef |grep svn|grep -v gre
root     31531     1  0 01:46 ?        00:00:00 svnserve -d -r /usr/data/svndata/ --pid-file=/usr/data/svndata/svn.pid
##检测 SVN 端口:
[root@s1 data]# netstat -ln|grep 369
tcp        0      0 :::3690                     :::*                        LISTEN
unix  2      [ ACC ]     STREAM     LISTENING     61369250 /tmp/ssh-YkTvv29389/agent.29389
unix  2      [ ACC ]     STREAM     LISTENING     61369961 /tmp/ssh-lRgQh29450/agent.29450
##建立版本库
##创建一个新的 Subversion 项目 dedev56
[root@s1 data]# svnadmin create /usr/data/svndata/dedev56
##配置允许用户 igaojie 读写访问
[root@s1 conf]# vi svnserve.conf
anon-access = none
auth-access = write
password-db = /usr/data/svnpasswd/passwd
authz-db = /usr/data/svnpasswd/authz
##将权限控制文件cp到svnpasswd目录下
cp authz passwd /usr/data/svnpasswd/
##authz 的配置:
cd /usr/data/svnpasswd/
#vi authz
##添加
#################################
[groups]
#定义组
admin = igaojie
#定义目录
[dedev56:/]
@admin = rw
#################################
##提示:注意 authz 权限格式的写法
##1.authz 中每个参数都要顶格写,开头不能有空格。
##2.对于组,要@开头,用户不需要@开头。
vi passwd
##添加:
#######################
# user=passwd
igaojie=sh09gj11**
######################
##提示:
##1.等号前为 SVN 帐号,等号后为 svn 密码
##2.更改 svnserve.conf 时,需要重起 SVN,更改 authz,passwd 文件时不需要重启
重启 SVN 命令<非必需>
kill -USR1 `cat /usr/data/svndata/svn.pid`
svnserve -d -r /usr/data/svndata/ --pid-file=/usr/data/svndata/svn.pid
##svn服务器端配置结束
####打开svn使用的3690端口
[root@s1 conf]# vim /etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3690 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
~
~
~
~
~
~
~
~
~
~
~
~
~
~
"/etc/sysconfig/iptables" 29L, 1595C 已写入
[root@s1 conf]#
##重启iptables
[root@s1 conf]# service iptables restart
Flushing firewall rules: [  OK  ]
Setting chains to policy ACCEPT: filter [  OK  ]
Unloading iptables modules: [  OK  ]
Applying iptables firewall rules: [  OK  ]
Loading additional iptables modules: ip_conntrack_netbios_ns [  OK  ]
2011-07-22

工作中和Tdking遇到这么一个问题:

1
2
3
4
5
$arr1 = array('aa','bb','cc','dd');
$json_arr1 = json_encode($arr1);
$json_de_arr1 = json_decode($json_arr1);
var_dump($json_de_arr1);

结果为:

array
  0 => string 'aa' (length=2)
  1 => string 'bb' (length=2)
  2 => string 'cc' (length=2)
  3 => string 'dd' (length=2)

但是 稍微修改一点 再看:

1
2
3
4
5
$arr1 = array('aa'=>'aa','bb','cc','dd');//将字符串作为key
$json_arr1 = json_encode($arr1);
$json_de_arr1 = json_decode($json_arr1);
var_dump($json_de_arr1);

这个时候的结果为:

object(stdClass)[1]
  public 'aa' => string 'aa' (length=2)
  public '0' => string 'bb' (length=2)
  public '1' => string 'cc' (length=2)
  public '2' => string 'dd' (length=2)

翻看了一下手册,唉,就这么简单:

1
2
3
4
5
$arr1 = array('aa'=>'aa','bb','cc','dd');
$json_arr1 = json_encode($arr1);
$json_de_arr1 = json_decode($json_arr1,true);//第二个参数 true 则返回array
var_dump($json_de_arr1);
2011-07-19
/*
获取日期 AddDayCount:天数
*/
function GetDateStr(AddDayCount)
{
var dd = new Date();
dd.setDate(dd.getDate()+AddDayCount);//获取AddDayCount天后的日期
var y = dd.getFullYear();
var m = dd.getMonth()+1;//获取当前月份的日期
var d = dd.getDate();
return y+"-"+m+"-"+d;
}
var yesterday = GetDateStr(-1);//昨天
var today = GetDateStr(0);//今天
alert(yesterday);
alert(today);
2011-07-15
$this->load->library('email');
$from = 'xufeng@techweb.com.cn';//发件人
$to = 'xf1982@gmail.com';//收件人
$subject = 'test send email in codeingiter by smtp';
$body = 'test send email in codeingiter by smtptest send email in codeingiter by smtptest send email in codeingiter by smtptest send email in codeingiter by smtptest send email in codeingiter by smtptest send email in codeingiter by smtptest send email in codeingiter by smtp';
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'ssl://smtp.gmail.com';
$config['smtp_user'] = 'xf1982xf@gmail.com';
$config['smtp_pass'] = '******';
$config['smtp_port'] = '465';
$config['smtp_timeout'] = '5';
$config['newline'] = "\r\n";
$config['crlf'] = "\r\n";
$this->email->initialize($config);
$this->email->set_mailtype('html');
$this->email->from($from, 'title');
$this->email->to($to);
$this->email->subject($subject);
$this->email->message($body);
2011-07-10

ul{
list-style-type:none;
}
ul li{
float:left;
width:15%;
line-height:30px;
border-top-color:#ffffcc;
border-left-color:#ffffcc;
text-decoration:none;
}
ul li:hover{
background:#ffffcc;
}
ul li span{
text-align:left;
width:18%;
}

?
<div style=”overflow:auto; zoom:1;”>
<ul>
<li><a title=”点击进入 [首都机场] 数据报表管理” href=”#”><span>首都机场</span></a></li>
<li><a title=”点击进入 [中国气象局] 数据报表管理” href=”#”><span>中国气象局</span></a></li>
<li><a title=”点击进入 [伊利] 数据报表管理” href=”#”><span>伊利</span></a></li>
<li><a title=”点击进入 [四川新闻网] 数据报表管理” href=”#”><span>四川新闻网</span></a></li>
<li><a title=”点击进入 [民航] 数据报表管理” href=”#”><span>民航</span></a></li>
<li><a title=”点击进入 [国航] 数据报表管理” href=”#”><span>国航</span></a></li>
<li><a title=”点击进入 [HP Corp] 数据报表管理” href=”#”><span>HP Corp</span></a></li>
<li><a title=”点击进入 [惠普] 数据报表管理” href=”#”><span>惠普</span></a></li>
<li><a title=”点击进入 [美团网] 数据报表管理” href=”#”><span>美团网</span></a></li>
<li><a title=”点击进入 [腾讯(科技)] 数据报表管理” href=”#”><span>腾讯(科技)</span></a></li>
<li><a title=”点击进入 [第一影响力演示] 数据报表管理” href=”#”><span>第一影响力演示</span></a></li>
<li><a title=”点击进入 [国家电网] 数据报表管理” href=”#”><span>国家电网</span></a></li>
<li><a title=”点击进入 [新华社Demo] 数据报表管理” href=”/admin/report/lists?user_id=332″><span>新华社Demo</span></a></li>
<li><a title=”点击进入 [瑞星] 数据报表管理” href=”#”><span>瑞星</span></a></li>
</ul>
</div>
高度自适应解决方案:

1.
?
1
<div style=”overflow:auto; zoom:1;”>

2.css
?
1</div>

2011-07-08
function Pinyin($_String, $_Code='UTF8'){ //GBK页面可改为gb2312,其他随意填写为UTF8
$_DataKey = "a|ai|an|ang|ao|ba|bai|ban|bang|bao|bei|ben|beng|bi|bian|biao|bie|bin|bing|bo|bu|ca|cai|can|cang|cao|ce|ceng|cha".
"|chai|chan|chang|chao|che|chen|cheng|chi|chong|chou|chu|chuai|chuan|chuang|chui|chun|chuo|ci|cong|cou|cu|".
"cuan|cui|cun|cuo|da|dai|dan|dang|dao|de|deng|di|dian|diao|die|ding|diu|dong|dou|du|duan|dui|dun|duo|e|en|er".
"|fa|fan|fang|fei|fen|feng|fo|fou|fu|ga|gai|gan|gang|gao|ge|gei|gen|geng|gong|gou|gu|gua|guai|guan|guang|gui".
"|gun|guo|ha|hai|han|hang|hao|he|hei|hen|heng|hong|hou|hu|hua|huai|huan|huang|hui|hun|huo|ji|jia|jian|jiang".
"|jiao|jie|jin|jing|jiong|jiu|ju|juan|jue|jun|ka|kai|kan|kang|kao|ke|ken|keng|kong|kou|ku|kua|kuai|kuan|kuang".
"|kui|kun|kuo|la|lai|lan|lang|lao|le|lei|leng|li|lia|lian|liang|liao|lie|lin|ling|liu|long|lou|lu|lv|luan|lue".
"|lun|luo|ma|mai|man|mang|mao|me|mei|men|meng|mi|mian|miao|mie|min|ming|miu|mo|mou|mu|na|nai|nan|nang|nao|ne".
"|nei|nen|neng|ni|nian|niang|niao|nie|nin|ning|niu|nong|nu|nv|nuan|nue|nuo|o|ou|pa|pai|pan|pang|pao|pei|pen".
"|peng|pi|pian|piao|pie|pin|ping|po|pu|qi|qia|qian|qiang|qiao|qie|qin|qing|qiong|qiu|qu|quan|que|qun|ran|rang".
"|rao|re|ren|reng|ri|rong|rou|ru|ruan|rui|run|ruo|sa|sai|san|sang|sao|se|sen|seng|sha|shai|shan|shang|shao|".
"she|shen|sheng|shi|shou|shu|shua|shuai|shuan|shuang|shui|shun|shuo|si|song|sou|su|suan|sui|sun|suo|ta|tai|".
"tan|tang|tao|te|teng|ti|tian|tiao|tie|ting|tong|tou|tu|tuan|tui|tun|tuo|wa|wai|wan|wang|wei|wen|weng|wo|wu".
"|xi|xia|xian|xiang|xiao|xie|xin|xing|xiong|xiu|xu|xuan|xue|xun|ya|yan|yang|yao|ye|yi|yin|ying|yo|yong|you".
"|yu|yuan|yue|yun|za|zai|zan|zang|zao|ze|zei|zen|zeng|zha|zhai|zhan|zhang|zhao|zhe|zhen|zheng|zhi|zhong|".
"zhou|zhu|zhua|zhuai|zhuan|zhuang|zhui|zhun|zhuo|zi|zong|zou|zu|zuan|zui|zun|zuo";
$_DataValue = "-20319|-20317|-20304|-20295|-20292|-20283|-20265|-20257|-20242|-20230|-20051|-20036|-20032|-20026|-20002|-19990".
"|-19986|-19982|-19976|-19805|-19784|-19775|-19774|-19763|-19756|-19751|-19746|-19741|-19739|-19728|-19725".
"|-19715|-19540|-19531|-19525|-19515|-19500|-19484|-19479|-19467|-19289|-19288|-19281|-19275|-19270|-19263".
"|-19261|-19249|-19243|-19242|-19238|-19235|-19227|-19224|-19218|-19212|-19038|-19023|-19018|-19006|-19003".
"|-18996|-18977|-18961|-18952|-18783|-18774|-18773|-18763|-18756|-18741|-18735|-18731|-18722|-18710|-18697".
"|-18696|-18526|-18518|-18501|-18490|-18478|-18463|-18448|-18447|-18446|-18239|-18237|-18231|-18220|-18211".
"|-18201|-18184|-18183|-18181|-18012|-17997|-17988|-17970|-17964|-17961|-17950|-17947|-17931|-17928|-17922".
"|-17759|-17752|-17733|-17730|-17721|-17703|-17701|-17697|-17692|-17683|-17676|-17496|-17487|-17482|-17468".
"|-17454|-17433|-17427|-17417|-17202|-17185|-16983|-16970|-16942|-16915|-16733|-16708|-16706|-16689|-16664".
"|-16657|-16647|-16474|-16470|-16465|-16459|-16452|-16448|-16433|-16429|-16427|-16423|-16419|-16412|-16407".
"|-16403|-16401|-16393|-16220|-16216|-16212|-16205|-16202|-16187|-16180|-16171|-16169|-16158|-16155|-15959".
"|-15958|-15944|-15933|-15920|-15915|-15903|-15889|-15878|-15707|-15701|-15681|-15667|-15661|-15659|-15652".
"|-15640|-15631|-15625|-15454|-15448|-15436|-15435|-15419|-15416|-15408|-15394|-15385|-15377|-15375|-15369".
"|-15363|-15362|-15183|-15180|-15165|-15158|-15153|-15150|-15149|-15144|-15143|-15141|-15140|-15139|-15128".
"|-15121|-15119|-15117|-15110|-15109|-14941|-14937|-14933|-14930|-14929|-14928|-14926|-14922|-14921|-14914".
"|-14908|-14902|-14894|-14889|-14882|-14873|-14871|-14857|-14678|-14674|-14670|-14668|-14663|-14654|-14645".
"|-14630|-14594|-14429|-14407|-14399|-14384|-14379|-14368|-14355|-14353|-14345|-14170|-14159|-14151|-14149".
"|-14145|-14140|-14137|-14135|-14125|-14123|-14122|-14112|-14109|-14099|-14097|-14094|-14092|-14090|-14087".
"|-14083|-13917|-13914|-13910|-13907|-13906|-13905|-13896|-13894|-13878|-13870|-13859|-13847|-13831|-13658".
"|-13611|-13601|-13406|-13404|-13400|-13398|-13395|-13391|-13387|-13383|-13367|-13359|-13356|-13343|-13340".
"|-13329|-13326|-13318|-13147|-13138|-13120|-13107|-13096|-13095|-13091|-13076|-13068|-13063|-13060|-12888".
"|-12875|-12871|-12860|-12858|-12852|-12849|-12838|-12831|-12829|-12812|-12802|-12607|-12597|-12594|-12585".
"|-12556|-12359|-12346|-12320|-12300|-12120|-12099|-12089|-12074|-12067|-12058|-12039|-11867|-11861|-11847".
"|-11831|-11798|-11781|-11604|-11589|-11536|-11358|-11340|-11339|-11324|-11303|-11097|-11077|-11067|-11055".
"|-11052|-11045|-11041|-11038|-11024|-11020|-11019|-11018|-11014|-10838|-10832|-10815|-10800|-10790|-10780".
"|-10764|-10587|-10544|-10533|-10519|-10331|-10329|-10328|-10322|-10315|-10309|-10307|-10296|-10281|-10274".
"|-10270|-10262|-10260|-10256|-10254";
$_TDataKey = explode('|', $_DataKey);
$_TDataValue = explode('|', $_DataValue);
$_Data = array_combine($_TDataKey, $_TDataValue);
arsort($_Data);
reset($_Data);
if($_Code!= 'gb2312') $_String = _U2_Utf8_Gb($_String);
$_Res = '';
for($i=0; $i<strlen($_String); $i++) {
$_P = ord(substr($_String, $i, 1));
if($_P>160) {
$_Q = ord(substr($_String, ++$i, 1)); $_P = $_P*256 + $_Q - 65536;
}
$_Res .= _Pinyin($_P, $_Data);
}
return preg_replace("/[^a-z0-9]*/”, '', $_Res);
}
function _Pinyin($_Num, $_Data){
if($_Num>0 && $_Num<160 ){
return chr($_Num);
}elseif($_Num<-20319 || $_Num>-10247){
return '';
}else{
foreach($_Data as $k=>$v){ if($v<=$_Num) break; }
return $k;
}
}
function _U2_Utf8_Gb($_C){
$_String = '';
if($_C < 0x80){
$_String .= $_C;
}elseif($_C < 0x800) {
$_String .= chr(0xC0 | $_C>>6);
$_String .= chr(0x80 | $_C & 0x3F);
}elseif($_C < 0x10000){
$_String .= chr(0xE0 | $_C>>12);
$_String .= chr(0x80 | $_C>>6 & 0x3F);
$_String .= chr(0x80 | $_C & 0x3F);
}elseif($_C < 0x200000) {
$_String .= chr(0xF0 | $_C>>18);
$_String .= chr(0x80 | $_C>>12 & 0x3F);
$_String .= chr(0x80 | $_C>>6 & 0x3F);
$_String .= chr(0x80 | $_C & 0x3F);
}
return iconv('UTF-8', 'GB2312', $_String);
}
//测试
echo Pinyin('这个是我的博客','gb2312'); //第二个参数“1”可随意设置即为utf8编码
echo Pinyin('春天来了','gb2312');
2011-06-30

MySQL使用4.1以上版本,管他是什么字符集,一律使用默认。不用去设置MySQL。

然后举个使用GB2312和UTF-8的例子。

好,你只要保证你的写着INSERT SQL语句的PHP文件编码为GB2312,那么恭喜你,你使用写着SELECT SQL语句的GB2312编码的PHP文件读取出来的数据也是GB2312的。

同理,只要你插入数据库的PHP文件是UTF-8编码,那么你录入的就是UTF-8的,读取出来同样使用编码为UTF-8的读取。

如果我录入为GB2312,显示要使用UTF-8怎么办,如果你的所有PHP文件为UTF-8编码,那么你在INSERT的时候,就必须使用iconv进行编码转换,将str转为GB2312入库,读取也一样,使用iconv转为UTF-8显示。

你的前端页面使用什么编码,那么你那些字符串已经被该种编码编过了,所以,尽管入库,他的机器码肯定就是那样的,不管存放在哪里,不管MYSQL指定为何种编码,他在录入数据的时候,并不会对你的数据进行转换。只要保证你的前端录入使用 UTF-8,那么你读取的也是UTF-8。

1) 使用 标签设置页面编码

这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为 GB2312、GBK、UTF-8(和 MySQL 不同,MySQL 是 UTF8)等等。因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。但是有的时候我们会发现有了这句还是不行,不管 xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。

请注意, 是属于 HTML 信息的,仅仅是一个声明,仅表明服务器已经把 HTML 信息传到了浏览器。

2) header(”content-type:text/html; charset=xxx”);

这个函数 header() 的作用是把括号里面的信息发到 http 标头。如果括号里面的内容为文中所说那样,那作用和标签基本相同,大家对照第一个看发现字符都差不多的。但是不同的是如果有这段函数,浏览器就会永远采用你所要求的 xxx 编码,绝对不会不听话,因此这个函数是很有用的。为什么会这样呢?那就得说说 http 标头和 HTML信息的差别了:

http 标头是服务器以 http 协议传送 HTML 信息到浏览器前所送出的字串。而 标签是属于 HTML 信息的,所以 header() 发送的内容先到达浏览器,通俗点就是 header() 的优先级高于 (不知道可不可以这样讲)。假如一个 php 页面既有header(”content-type:text/html;charset=xxx”),又有,浏览器就只认前者 http 标头而不认 meta 了。当然这个函数只能在 php 页面内使用。

同样也留有一个问题,为什么前者就绝对起作用,而后者有时候就不行呢?这就是接下来要谈的Apache 的原因了。   3) AddDefaultCharset

Apache 根目录的 conf 文件夹里,有整个 Apache 的配置文档 httpd.conf。

用文本编辑器打开 httpd.conf,第 708 行(不同版本可能不同)有 AddDefaultCharset xxx,xxx为编码名称。这行代码的意思:设置整个服务器内的网页文件 http 标头里的字符集为你默认的 xxx字符集。有这行,就相当于给每个文件都加了一行 header(”content-type:text/html; charset=xxx”)。这下就明白为什么明明 设置了是 utf-8,可浏览器始终采用 gb2312 的原因。

如果网页里有 header(”content-type:text/html; charset=xxx”),就把默认的字符集改为你设置的字符集,所以这个函数永远有用。如果把 AddDefaultCharset xxx 前面加个”#”,注释掉这句,而且页面里不含 header(”content-type…”),那这个时候就轮到 meta 标签起作用了。

下面列出以上的优先顺序:

.. header(”content-type:text/html; charset=xxx”)

.. AddDefaultCharset xxx

..

如果你是 web 程序员,建议给你的每个页面都加个header(”content-type:text/html;charset=xxx”),这样就可以保证它在任何服务器都能正确显示,可移植性也比较强。

4) php.ini 中的 default_charset 配置:

php.ini 中的 default_charset = “gb2312″ 定义了 php 的默认语言字符集。一般推荐注释掉此行,让浏览器根据网页头中的 charset 来自动选择语言而非做一个强制性的规定,这样就可以在同台服务器上提供多种语言的网页服务。

1)读取mysql前设置编码,代码如下:

mysql_query(”SET NAMES ‘utf-8′”,$database->_resource);

mysql_query(”SET CHARACTER SET utf-8″,$database->_resource);

但不是总有效,设置gb2312就不行;

2)使用iconv函数转换编码,但是Php默认不支持;

3)使用mb_convert_encoding函数转换编码,有些虚拟主机不支持;

4)使用博大公司写的class.Chinese.php转换编码,可以避免以上出现的问题,为较好的解决方案。 将UTF8转换为GB2312的代码如下:

include(”class.Chinese.php”);

$chs = new Chinese(”UTF8″,”GB2312″,trim($title));

$title = $chs->ConvertIT();