要求传入数据是utf-8编码,如果不是,请使用mb_convert_encoding()进行转码
/**
    * @param {string} $word 必须是一个汉字,或代表汉字的一个数组(用str_split切割过)
    * @return {string} 一个十进制unicode码,如4f60,代表汉字 “你”
    */ 
function getUnicodeFromOneUTF8($word) {
    //获取其字符的内部数组表示,所以本文件应用utf-8编码!
    if (is_array( $word))
    $arr = $word;
    else
    $arr = str_split($word);
    //此时,$arr应类似array(
    //定义一个空字符串存储
    $bin_str = ”;
    //转成数字再转成二进制字符串,最后联合起来。
    foreach ($arr as $value)
    $bin_str .= decbin(ord($value));
    //此时,$bin_str应类似111001001011110110100000,如果是汉字"你"
    //正则截取
  [...]

因需要,今天下载了ucenter和uchome来安装,结果老是出问题,完全感觉不到装php开源程序的乐趣。但又不得不装上他们去研究一些东西,所以只能跑到代码里去跟踪了,在此将结果分享一下。

七月 1st, 2009php检测远程文件

通常我们会用php去检测远程文件是否存或者是判断远程文件类型,以及通过文件大小来判断远程文件是否有效(比如一首正常的流行歌曲的mp3文件不会少于300k吧)。

方法众多,本人觉得通过socket抓出HTTP报头来判断无疑是性价比最优的。下面就是通过修改HttpClient得到了一个getFileHeader的类(含有示例及结果)

六月 16th, 2009最新CSFT安装手记

CSFT介绍
CSFT,全称为CoreSeek Fulltext Search Server,也就是CoreSeek 全文检索服务器。Sphinx默认不支持中文索引及检索,CSFT是在Sphinx基础上开发的全文检索软件,按照GPLv2协议发行。Coreseek (http://www.coreseek.com) 为sphinx在中国地区的用户提供支持服务。
到写本文时,CSFT最新版为2009.6.7的3.1rc1版。所有版本发表和修订记录见:http://www.coreseek.cn/products/ft_changelog/
CSFT下载
下载地址:http://www.coreseek.cn/products/ft_down/
选择Source版. Coreseek Fulltext Server(源代码) Coreseek Mmseg(源代码)
安装配置CSFT
1.安装mmseg
tar zxvf mmseg-3.1.tar.gz
   cd mmseg-3.1
   ./configure –prefix=/usr/local/mmseg
   make && make install
2.安装csft
tar zxvf csft-3.1.tar.gz
   cd csft-3.1
   ./configure –prefix=/usr/local/sphinx -with-mysql=/usr/local/mysql -with-mysql-includes=/usr/local/mysql/include/mysql -with-mysql-libs=/usr/local/mysql/lib/mysql -with-mmseg-includes=/usr/local/mmseg/include/mmseg -with-mmseg-libs=/usr/local/mmseg/lib -with-mmseg
   make && make install
注意:在make时若提示找不到iconv,则在configure结束后在src下的Makefile中查找到LIBS,然后加上 -liconv
3.生成词典
重回到mmseg的源代码目录
cd data
   mmseg -u unigram.txt
   mv  unigram.txt.uni  uni.lib
  cp uni.lib /usr/local/sphinx/
4.配置(略)

估计这个说法有些诡异,不过我也不知道该怎么描述,对应成字符串就是求最大公共子串,此时的字符串就是数组,字符对应的是数组的元素。
比较常规的方法就是LCS,单纯从c的角度,LCS还是比较耗空间。所有出现了一些替代方法,不过都相对耗时一些。
下面是我用php来计算两个数组中最长公共元素的代码。
function longestComArr(&$newStrArr1,&$newStrArr2){
    $maxlen = 0;
    for($i=0;$i<count($newStrArr1);$i++){
        $j=$r=0;//记录当前短数组下标
        while($newStrArr2[$j] && $newStrArr1[$i]){
            $k=$i;//记录当前长数组下标
            while ($newStrArr1[$k] && $newStrArr1[$k] !=$newStrArr2[$j]) {
                $k++;
            }
            if ($newStrArr1[$k] ==$newStrArr2[$j]) {
  [...]

五月 25th, 2009php分析字符串成单词

用php来尝试给英文进行分词,欢迎大家拍砖,详细代码进入文章查看

PHP分词的上乘之选,原生态支持php中文分词,提供dll库和so包下载。
SCWS 在概念上并无创新成分,采用的是自行采集的词频词典,并辅以一定程度上的专有名称、人名、地名、数字年代等规则集。 采用纯 C 代码开发,以 Unix-Like OS 为主要平台环境,提供共享函数库,方便植入各种现有软件系统。此外它支持GBK,UTF-8,BIG5 等汉字编码。
切词效率测试(UTF-8编码,随机从天涯抓取了一个连载页面测试结果, 45Kb左右的文本切词时间是0.026秒, 换算完毕大概是 1.5MB文本/秒)
项目地址:
http://www.ftphp.com/scws/

基于OpenID Enabled修改而成的openid类,因为是自己用,所以不怎么规范。凑合着用吧。具体代码点进去看吧。

五月 18th, 2009php之openid

JanRain的OpenID Enabled(http://openidenabled.com/)是一个不错的openid库。
open id中的相关字段如下
1.昵称:openid.sreg.nickname:
Any UTF-8 string that the End User wants to use as a nickname.
2.电子邮件地址openid.sreg.email:
The email address of the End User as specified in section 3.4.1 of [RFC2822] (Resnick, P., “Internet Message Format,” .).
3.全名openid.sreg.fullname:
UTF-8 string free text representation of the End User’s full name.
4.生日:openid.sreg.dob:
The End User’s date of birth as YYYY-MM-DD. Any values whose representation [...]

五月 4th, 2009php扩展之c到c++简记

1.理解config.m4
1).dnl是注释
2).PHP_ARG_WITH或者PHP_ARG_ENABLE指定了PHP模块的工作方式,任选一种
3).PHP_REQUIRE_CXX()用于指定这个扩展用到了C++
4).PHP_SUBST(SYSFILE_SHARED_LIBADD)用于说明这个扩展编译成动态链接库的形式
5).PHP_ADD_LIBRARY(stdc++,””,SYSFILE_SHARED_LIBADD)用于将标准C++库链接进入扩展
6).PHP_NEW_EXTENSION用于指定有哪些源文件应该被编译,文件和文件之间用空格隔开.
2.c转变成c++
ext_skel默认生成的模块框架是针对C的,我们要使用C++,那以上的3,5两个宏就是必须的.另外还要把(扩展名.c)改名成(扩展名.cpp),所以PHP_NEW_EXTENSION原本包括的(扩展名.c)也要修改.
在使用C++之后要注意一个小问题,那就是php_(扩展名).h这个文件可能被PHP的其他部分所引用到,而引用者很可能是一个.c文件,所以不能在php_(扩展名).h里包含任何C++所独有的东西.比如标准模版库,类,或者bool类型等等.
3.后续工作
默认生成的(扩展名).c(现在改名为(扩展名).cpp)了,因为是C++了,有几点是要修改的: (zend_function_entry是导出函数列表, zend_module_entry描述了模块的信息.)
1).#include “php.h” #include “php_ini.h” #include “ext/standard/info.h” 要用extern “C” 修饰.
2).ZEND_GET_MODULE也要用extern “C”修饰
[...]


© 2006~2009 伊人莫公