符合 RFC 822 的 Email 地址 PHP 验证函数

RFC 822: STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES 定义了 Email 地址的详细格式。

于是就有了遵循这个标准的 Email 地址验证代码(php) :

function is_valid_email_address($email){
        $qtext = '[^\x0d\x22\x5c\x80-\xff]';
        $dtext = '[^\x0d\x5b-\x5d\x80-\xff]';
        $atom = '[^\x00-\x20\x22\x28\x29\x2c\x2e\x3a-\x3c'.
            '\x3e\x40\x5b-\x5d\x7f-\xff]+';
        $quoted_pair = '\x5c[\x00-\x7f]';
        $domain_literal = "\x5b($dtext|$quoted_pair)*\x5d";
        $quoted_string = "\x22($qtext|$quoted_pair)*\x22";
        $domain_ref = $atom;
        $sub_domain = "($domain_ref|$domain_literal)";
        $word = "($atom|$quoted_string)";
        $domain = "$sub_domain(\x2e$sub_domain)*";
        $local_part = "$word(\x2e$word)*";
        $addr_spec = "$local_part\x40$domain";
        return preg_match("!^$addr_spec$!", $email) ? 1 : 0;
    }

PHP : Parsing Email Adresses in PHP 上面也提到了 ruby 和 python 的版本

PHP : Parents Helping Parents

这个网站:http://www.php.com/

这里的 PHPParents Helping Parents 的意思,嘿嘿。

PHP’s mission is to help children with special needs receive the resources, love, hope, respect, health care, education, and other services they need to reach their full potential by providing them with strong families, dedicated professionals, and responsive systems to serve them.

启功先生逝世

启功先生因病于2005年6月30日2时25分逝世,享年93岁。

九点多考完试就收到同学的短信,说科技楼的电子屏上公告启功于30号凌晨两点逝世了。

十点多的时候拿到了学校的讣告。

启功照片

中国当代著名教育家、国学大师、书画家、文物鉴定家、诗人,中国人民政治协商会议全国委员会常务委员、中央文史研究馆馆长、“九三”学社顾问、国家鉴定委员会主任委员、中国书法家协会名誉主席,中国佛教协会、故宫博物院、国家博物馆顾问,西泠印社社长、北京师范大学教授启功先生因病于2005年6月30日2时25分逝世,享年93岁。

北京师范大学在英东学术会堂演讲厅设置灵堂,供校内外各界人士吊唁。吊唁为6月30日起每天8点-22点,直至遗体告别时间。

启功先生字元白,1912年生于北京,满族。幼年失怙且家境中落,自北京汇文中学中途辍学后,发愤自学。稍长,从贾尔鲁先生(羲民)、吴熙曾先生(镜汀)习书法丹青,从戴绥之先生(姜福)修古典文学。刻苦钻研,终至学业有成1933年经傅沅叔(增湘)先生推介,受业于陈援庵先生(垣),获闻学术流别与考证之学。援庵先生慧眼识才,聘为辅仁中学国文教员;1935年任辅仁大学美术系助教;1938年后任辅仁大学国文系讲师,兼任故宫博物院专门委员,从事故宫文献馆审稿及文物鉴定工作;1949年任辅仁大学国文系副教授兼北京大学博物馆系副教授;1952年后任北京师范大学副教授、教授至今。现任中国人民政治协商会议全国委员会常务委员会委员、国家文物鉴定委员会主任委员、中央文史研究馆馆长、中国书法家协会名誉主席、北京师范大学教授、博士研究生导师。

前一阵子只知道老先生一直在住院,没想到今天就去世了……

当年报考师大的时候,就听老爸说过学校有一个叫启功的大书法家,来学校后知道老先生不仅书法造诣深厚,更是德高望重,真正的德艺双馨。

先生仙逝,师大至此无大师矣。

沉痛悼念启功先生

PHP 10 周年

今天,6月8日,是 PHP 诞生十周年的日子。刚从很多国外的 blog 上知道了这个特别的日子。很值得纪念一下。

我差不多也是去年的这个时候知道 PHP 这东东的,那时是数据库课期末要做一个小程序。刚才那学期在学植物地理,所以花了一星期边学边做,弄了一个 PHP 的植物图像查询系统。从那之后就无法控制地喜欢上了 PHP 这家伙,直到现在,而且每天都能发现很多 PHP 的有趣。所以要感谢 PHP 给我带来了这么多快乐,呵呵。

同时,期待 PHP 的下个十年更好,呵呵。

a decade of php

Cake PHP framework 0.9 dev 发布

昨天 Cake PHP framework 发布了 0.91dev 版。

新版将函数的命名风格从像 input_tag() 这种改到 inputTag() 这种了。汗,不知应该怎么叫啊 :'(

协议换成使用 MIT License

框架程序改动也挺多的,详见 Cake’s release history ,不再赘述。

作者还发布了一个 Cake Framework AJAX Demo ,展示了如何使用 Cake 进行 Ajax 方面的开发。

同时并提供源码下载:Cake Framework AJAX Demo source code

另外从 Sourceforge 上看到了一个叫 xajax 的 PHP 类库 ,刚出炉不久 ,5.26 号发布的第一个版本: 0.1 alpha ,现在是 0.3 alpha 。它提供的一个叫 Graffiti Wall 的东东还比较好玩。

Cake PHP framework

Cake PHP framework 这东东时常在我这个 blog 上订阅的 del.icio.us/tag/php 中出现。

这是一个基于 PHP 的 framework 。它的作者称 Cake PHP framework 的设计思想源自 37signalsRuby on Rails ,一个最近非常的 Ruby 框架。他说:

after playing around with Ruby on Rails you don’t want to develop software the old way. Rails does all the paperwork involved with connecting to the database, setting up the templating, linking code to URLs in a meaningful way, and so on. You write the application business logics and fire it up. Very fast, very efficient programming, saves a lot of unnecessary bother.

Cake aims to provide an easy way to write PHP applications. While designed as a Rails rip-off, it aims to be a framework of it’s own, along with certain functionalities, such as custom, specialized modules, that, if I understand correctly, Rails developer are not particularily fond of.

类似于 Ruby on Rails ,它封装了数据库连接,模板,及生成链接。最大的特点就是数据操作,不用自己再写多少代码。和 Ruby on Rails 类似,它生成一个数据表的操作最少只要一行代码。 Cake PHP framework 还有很大的一个优点就是它是一个轻量级的框架,虽然第一次看来会觉得很神奇,但是仔细看它的代码也很好懂而且也没什么特殊之处,但其开发使用方式确实很独特,实用,高效。如果是作基于数据库的 PHP 系统,这是一个很值得考虑的选择 。

看一下 Cake Tutorial 就能了解用 Cake PHP framework 建立一个 Web Application 是如何的快速方便了。它介绍了如何快速地建立一个 blog 程序的例子,几分钟就能搞定。

越来越发现 PHP 世界的有趣,哈哈。

DotClear 1.2.1 发布

DotClear 1.2.1 今天发布了。

新版本增加了四种语言支持,包括中文(我前几天提交上去的)。

新版本增加了一个新的Themes,一个防垃圾留言的插件,可通过拖拉分类及链接设置其排序,及其它小的改动。大的变化不多。

作者 Olivier 说:Ce n’est pas une révolution, juste une évolution dans le bon sens – et une préparation à la révolution,意思是:It is not a revolution, just an evolution in the good direction – and a preparation with the revolution。另外 Olivier 还说下一版本可能会支持 tag 等其它新的功能。

下面是其ChangeLog:

  • 4 new languages :Chinese (by Tsing) German (by Hans and Frederik) Italian (by Federico) Spanish (by Gromka)
  • Translation of help files (by Tehu)
  • New default theme (by Maurice.)
  • New $PLUGIN_HEAD variable in which a plugin can specify optional HTML headers.
  • Indexes in MySQL tables.
  • Improved MySQL plugin with backup and restore (by Pep.)
  • Javascript event which alert when leaving an unsaved entry.
  • Drag and drop sorting on categories and links.
  • Javascript fixes.
  • New wiki2xhtml with macro support.
  • Added help files in all languages but Chinese.
  • New dcCustomTitle() template function which display $dc_custom_title global variable (useful for plugins.)
  • Added a template function to display an admin link if user is logged in.
  • Fixed bug #15 about $_GET (yeah!)
  • Added “short feeds” option.
  • Fixes in Atom and RSS feeds.
  • New global variable $dc_args which returns URL arguments.
  • Moved sessions to a database table.
  • Removed SQL cache.

附:dotClear的英文模板文件下载

dotClear trackback乱码问题的解决

刚才突然想起这个dotClear的trackback一直有乱码问题,于是修改了一下dotClear的代码,其实很简单,就是修改一下dotclear对于utf-8编码的判断机制,让它总是以utf-8接收和发送trackback就可以了。原来的机制是dotClear要判断对方编码机制,但是对于其它blog程序来说,没有提供编码的消息,因此就dotClear就会出错,将本来已经是utf-8的信息又进行了一次utf-8编码。

在本机用wordpress和dotClear双向测试,已经没有问题了。往玄之又玄那儿发了一个trackback也没问题了。

不过没有对其它的blog程序进行过测试,但是估计只要trackback内容是utf-8编码的话,应该都没有问题。

以下是修改方法:

1.将inc/classes/class.blog.php 第2171行:

$do_utf8 = false;

修改为:

$do_utf8 = true;

2.将tb.php 的第127行:

if (dc_encoding == 'UTF-8' && (empty($_REQUEST['utf8']) || $_REQUEST['utf8'] != 1))

修改为:

if (dc_encoding == 'UTF-8' && !empty($_REQUEST['utf8']) && $_REQUEST['utf8'] != 1)

具体行数不同版本可能不同,我用的是通过Subversion下载的dotClear的最新代码。不过差别也不是很大。

解决掉这个问题后,这个dotClear就更优秀了,呵呵。

相关内容:

HessianPHP

这是昨晚上从 Effective Life 上看到的。最近一直在找这方面的资料。马上下下来看,是一个很不错的东东。

它是Hessian在PHP上的实现,关于Hessian可以看下面这段介绍。

“The Hessian binary web service protocol makes web services usable without requiring a large framework, and without learning yet another alphabet soup of protocols. Because it is a binary protocol, it is well-suited to sending binary data without any need to extend the protocol with attachments.”

我昨晚写了它的介绍写了一半,不过 Binzy 今天已经把它的介绍以及示例写出来了,所以我就不用再写了,呵呵。详见Introduce Hessian PHP

PHP在Remoting和WebService方面的选择确实不是特别多。我找到的比较理想的就是PEAR:SOAP和nusoap这两个。不过Hessian有一个很优势,就是它有Java,Python,Ruby,dotNET等语言的实现,可以实现多种语言间的互通。这正好是我一直想找到的方案,用PHP调用COM组件效率毕竟太低了。

更多的内容可见于HessianPHPHessian的主页