php utf-8编码 正则匹配中文

首先unicode里面 中文区域是0x4e00-0x9fa5
在java或者js这种以unicode编码处理字符串的编程语言中
/^[\u4e00-\u9fa5]+$/就可以判断一个字符串是否全部为中文

那么php中 字符的编码根据页面而定
页面是gbk的 字符编码就是gbk的 utf-8也同理
之前有一个表达式 /^[\x80-\xff]+$/
仅仅可以匹配是否含有非ascll字符
而汉字只是其中一个比较小的区域 不太精确

由于我的页面编码是utf-8的
于是把js的表达式搬到php中来
提示PCRE不支持\u和其他乱七八糟的一大堆东西

后来查资料了解到 php的正则有一种叫做字符组的东西
\x{...}表示
于是把表达式改成/^[\x{4e00}-\x{9fa5}]+$/
又提示\x表达式后的数字太大

又查了资料 了解到可以使用修正模式”u” 让程序把后面当成unicode字符处理
于是改成了/^[\x{4e00}-\x{9fa5}]+$/u 测试成功

所以php下正则匹配中文的表达式是 /^[\x{4e00}-\x{9fa5}]+$/u
这个仅适用于utf-8编码

php取到的时间总是差8小时的解决方法

从php5.1开始,在设置文件”php.ini”里面有一项叫做date.timezone,可以设置服务器所在的时区。刚安装的php此项应该是注释掉的,这种情况下使用的是格林尼治标准时间,也就是+-0的时区。

我们可以把这个配置改掉,即去掉前面的分号,在后面的等号之后加上”PRC”,比如”date.timezone=PRC”,就可以纠正过来。其他备选的值有”Asia/Chongqing”、”Asia/Shanghai”、”Asia/Urumqi”、”Asia/Macao”、”Asia/Hong_Kong”、”Asia/Taipei”、”Asia/Singapore”,或者直接使用”Etc/GMT-8”。

如果遇到了像虚拟主机那种无法修改配置文件的情况,可以在获取时间之前加上一句date_default_timezone_set('PRC');,就解决了。