Skip navigation.

极湖

无不用其“极”

给 javascript 的 String 增加 replaceAll 方法

通常情况下,javascript 下批量替换字符串都用正则表达式,如:
sText = sText.replace(/str1/g, 'str2');

或者
sText = sText.replace(new RegExp('str1', 'g'), 'str2');

问题是,如果要替换的字符串是变量,以上方法反倒不好用。

其实,给String增加一个简单的方法即可实现字符串的批量替换:
String.prototype.replaceAll = function(sSearch, sReplace){
    return this.split(sSearch).join(sReplace);
};

测试:
alert("s1 and s1".replaceAll('s1', 's2'));

MySQL下复制表格的方法

两步走:
CREATE TABLE new_table LIKE original_table;
INSERT INTO new_table SELECT * FROM original_table;

这样做的好处是同时复制表格的主键等。

如果只是复制数据:
CREATE TABLE new_table AS SELECT * FROM original_table;

即可。

escape(), encodeURI(), encodeURIComponent() 的区别

,

javascript 的函数 escape(), encodeURI(), encodeURIComponent(),功能都是对 HTML 的一部分字符进行加密。至于哪些字符被加密那些字符不被加密,容易搞混,因此做一个简单的测试和总结。

测试对象范围: %20(半角空格) 〜 %7E (波浪字符~)

元数据
 !"#$%&'()*+,-./
0123456789
:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ
[\]^_`
abcdefghijklmnopqrstuvwxyz
{|}~


escape()
%20%21%22%23%24%25%26%27%28%29*+%2C-./
0123456789
%3A%3B%3C%3D%3E%3F@
ABCDEFGHIJKLMNOPQRSTUVWXYZ
%5B%5C%5D%5E_%60
abcdefghijklmnopqrstuvwxyz
%7B%7C%7D%7E%7F


encodeURI()
%20!%22#$%25&'()*+,-./
0123456789
:;%3C=%3E?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ
%5B%5C%5D%5E_%60
abcdefghijklmnopqrstuvwxyz
%7B%7C%7D~%7F


encodeURIComponent()
%20!%22%23%24%25%26'()*%2B%2C-.%2F
0123456789
%3A%3B%3C%3D%3E%3F%40
ABCDEFGHIJKLMNOPQRSTUVWXYZ
%5B%5C%5D%5E_%60
abcdefghijklmnopqrstuvwxyz
%7B%7C%7D~%7F


总结
  • 以上函数对 [0-9A-Za-z] 都不作变换。
  • escape() 不变换的字符是 *+-./@_
  • encodeURI() 不变换的字符是 !#$'()*+,-./:;=?@_~
  • encodeURIComponent() 不变换的字符只有 !'()*-._~
  • 对于多字节代码,比如 UTF-8 编码的「」,escape() 变换的结果是 %u554A,encodeURL() 以及 encodeURIComponent() 的变换结果是 %E5%95%8A


以上三个函数的逆变换函数分别是 unescape(), decodeURI(), decodeURIComponent()

※以上资料翻译整理自 groundwalker.com

PHP 正则表达式常用操作符

,

这东西太常用,有时候又记不住,每次上Google查询,太费事,所以贴一个在这儿。
.(句点)    匹配所有单个字符
^(脱字符号)    匹配出现在行或字符串开头的空字符串
$(美元符号)    匹配出现在行尾的空字符串
A    匹配大写字母 A 
a    匹配小写字母 a 
\d    匹配所有一位数字
\D    匹配所有单个非数字字符
\w    匹配所有单个字母或数字字符;同义词是 [:alnum:] 
[A-E]    匹配所有大写的 A、B、C、D 或 E 
[^A-E]    匹配除大写 A、B、C、D 或 E 之外的任何字符
X?    匹配出现零次或一次的大写字母 X 
X*    匹配零个或多个大写字母 X 
X+    匹配一个或多个大写字母 X 
X{n}    精确匹配 n 个大写字母 X 
X{n,m}    至少匹配 n 个且不多于 m 个大写字母 X;如果忽略 m,则表达式将尝试匹配至少 n 个 X 
(abc|def)+    匹配一连串的(最少一个)abc 和 def;abc 和 def 将匹配

jQuery 1.3 正式登场

,

闲来无事,打开 jQuery 的主页看了一下,发现,下载链接下面的当前版本已经变成 1.3。仔细一看,新版本的 jQuery 已经于 1月 14 日发布。

和前一版本 1.2.6 相比,jQuery 1.3 的主要改进如下:

1. 集成 Sizzle 引擎
Sizzle 是一个独立的 CSS 查询引擎,同样出自 jQuery 的作者 John Resig

2. 增加 .live() 和 .die() 方法。
这两个方法用来实现网页上新追加元素的事件自动绑定和解除。

3. 彻底检修事件处理的代码
完全重新布置,简化了事件处理。

4. 重写了动态插入 HTML 的代码
比如 append, prepend, before 和 after 等方法,重写之后速度快了很多。

5. 重写了偏移计算的代码
元素定位的偏移计算方法超级快速。

6. 不再增加新浏览器的探测
增加 jQuery.support 属性,jQuery.browser 保留但不推荐使用。

选择开发框架的要点

, ,

看了一篇文章《Key Points for Choosing the Best framework》,说的是选择开发框架的时候应该考虑的要点,尽管这篇文章提到的框架都是 Java 的,然而所列举的几个要点也完全适用于其他的语言,因此具有一定的参考价值。

我把几个要点粗略翻译了一下,刨去了其中提到的几个框架名字。如下:

流行度(Popularity)
有助于快速上手。

市场(Market)
更容易找到工作。

方便性(Convenience)
最好不要有太长的学习曲线。

实现时间(Time to implement )
尽量快速完成任务。

适用范围(Scope)
最好能与其他框架协同工作。

文档(Documentation)
如果没有这东西,你很容易被卡住。

论坛(Forums)
社区越大,你的工作越容易完成。

Bug 跟踪(Bug tracking)
如果你有意深入,框架需提供问题报告功能。

参考书(Reference Books)
在线查询会花费你大量时间,因此书本亦不可缺少。

轻量(Light weight)
如果你用到的功能不多,过于复杂的框架反而不好。

健壮(Robust)
起码在您想实现的功能当中,不能存在已知的缺陷。

特点(Features)
某个强项或许会让你觉得时间过得轻松愉快。

挖出一个“重量级” PHP Framework —— Yii

, ,

这些天一直在挖掘轻量级 PHP Framework,找来找去,突然发现一个叫 Yii 的 Framework,这个框架让我眼前一亮。

看了一些介绍,目前我所了解到的信息如下:

1. Yii 的程序是身在美国的中国人写的。(主要开发者叫薛强)

2. Yii 的开发者原先是 Prado 项目的主要成员。

3. Yii 的主要卖点是速度,一个字——快。

4. Yii 刚刚出道,目前版本是 1.0.1, 已经有不少人关注这个框架,包括一些有 CakePHP 或其他框架的开发经验的老手。

5. Yii 很注重 AJAX 的支持,尤其是基于 jQuery 的应用。

挖掘轻量级 PHP Framework

, ,

提起 PHP Framework,总是会想到 CakePHPZend Framework, Symfony, CodeIgnitor 等大名鼎鼎的框架,这些框架基本都提供一整套的东西,个头也比较大,运行效率不太令人满意,还有就是比较复杂,不容易掌握。

这些天在网上找轻量级的 PHP Framework,只考虑 MVC 模式的框架。 网上公开的 PHP 开发框架多如牛毛,能看入眼的却不多,选几个自己认为不错的如下:

1. LightVC

看了一下代码结构,觉得比较清爽。这个框架把 MVC 中的 M 暂时丢开,用这个框架的人可以自己选择 Model 功能的实现方法。该框架的作者同时还做了一个叫 CoughPHP 的项目,单独实现了 Model 的功能,因此两个合起来使用应该配合很好。当然你也可以使用 Propel 或是 Doctrine 或是 Outlet

2. TinyMVC

这个框架看起来是 Smarty 的作者写的,基本上只是搭了一个框架,具体的功能看起还得自己添加不少代码,数据库部分的功能用 PDO 来实现(这个选择个人觉得挺不错),奇怪的是,框架的 View 部分默认没有使用 Smarty,要用 Smarty 还得自己改代码去实现。

3. Adroit

其实这是以前就发现的,现在又把它找了出来。看看代码稍微有些杂乱,不是很清爽,操作数据库的代码尤其不让人满意,连最基本的字段值 quote(引号变换) 都没做,作者提供几个生成诸如生成 Controller、Model 的 PHP Script,个人感觉可有可无。

4. Pluf

用 PHP5 来实现 Python 下著名框架 Django 的功能,内容比较齐全,既熟悉Django的人又熟悉PHP的人或许会喜欢它。

5. Simplemvc

一篇介绍怎么用 PHP 写 MVC 框架的文章,我下载了文章后面附加的代码,看了一下觉得还可以,至少不难懂。如果想自己写框架,相信这是个不错的模板。

老系统(Redhat AS3)下编译安装 Subversion 1.5.5

,

1. 下载

wget http://subversion.tigris.org/downloads/subversion-1.5.5.tar.bz2
wget http://subversion.tigris.org/downloads/subversion-deps-1.5.5.tar.bz2

2. 编译安装

tar -zxvf subversion-1.5.5.tar.bz2
tar -zxvf subversion-deps-1.5.5.tar.bz2
cd subversion-1.5.5
./configure
make

报警:没有 Berkley DB

出错:
/usr/include/openssl/kssl.h:72:18: krb5.h: No such file or directory
... ...


3. 安装 OpenSSL 最新版

wget http://www.openssl.org/source/openssl-0.9.8i.tar.gz
tar -zxvf openssl-0.9.8i.tar.gz
cd openssl-0.9.8i
make
make install

4. 安装 Berkley DB

下载 db-4.7.25.tar.gz (不能直接 wget,具体怎么做不再赘述)
tar -zxvf db-4.7.25.tar.gz
cd db-4.7.25
../dist/configure --prefix=/usr/local/berkeley-db --enable-compat185
make
make install

5. 排错

经查证,文件 krb5.h 在 /usr/kerberos/include/ 下面,网上有介绍说在 Makefile 里面加上这个路径就可以,于是在 Makefile 中追加:
-I//usr/kerberos/include
再次编译,仍然出错。

最后只有用文件链接的土办法来解决:
ln -s /usr/kerberos/include/krb5.h /usr/include/krb5.h
ln -s /usr/kerberos/include/profile.h /usr/include/profile.h
ln -s /usr/kerberos/include/com_err.h /usr/include/com_err.h

重新配置和编译
./configure --with-ssl --with-berkeley-db=/usr/local/berkeley-db
make

还是出错,说是找不到 libdb-4.1.la 和 libexpat.la。
上网找解决办法,说是加 --disable-shared 即可解决。

6. 再次编译安装

cd subversion-1.5.5
./configure --with-ssl --with-berkeley-db=/usr/local/berkeley-db --disable-shared
make
make install

忙活半天,终于装上。
为了给后人省时间,记录一下安装过程。

删除 Postfix 邮件队列中的特定邮件

, ,

用一个命令组合即可删除 Postfix 邮件队列中的特定邮件。

例:
# mailq | awk '/bad_address@bad_domain/ {print $1}' | tr -d '*' | xargs -n 1 postsuper -d

其中 bad_address@bad_domain 这个字符串根据实际情况修改。

这个命令用到了 awk,tr, xargs 这些命令,很有代表性,因此记录一下。
January 2010
S M T W T F S
December 2009February 2010
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30