RSS
  • 首页
  • 关于

2009年8月 的文章存档

Noel Gallagher宣布退出Oasis

八月 30, 2009 by admin | 0 Comment »

今天中午看到一则重大新闻:英国Oasis乐队的吉他手、主要的歌曲创作者以及第二主唱,同时也是乐队的核心,主唱的哥哥,Noel Gallagher (诺埃尔·加勒格)在乐队的官网发布了这样一则声明:

It’s with some sadness and great relief to tell you that I quit Oasis tonight. People will write and say what they like, but I simply could not go on working with Liam a day longer. Apologies to all the people who bought tickets for the shows in Paris, Konstanz, and Milan.
(很遗憾同时也很宽慰地告诉你们,今晚我将退出Oasis。人们怎么说怎么写都可以,但我实在是不能再和Liam共处下去了,一天都不行。对于巴黎、康斯坦斯以及米兰的那些买了票的歌迷,我要说一声抱歉。)

有传闻说此事是因为他的弟弟,也就是乐队的主唱Liam Gallagher在巴黎与他发生了争执,Liam甚至还砸烂了Noel的吉他,于是Noel一气之下宣布离队。但是既然已经在官网发布声明,说明此事应该是正式的而非玩笑。没有了Noel的绿洲还是绿洲么?

Gallagher兄弟,左为Liam,右为Noel

Gallagher兄弟,左为Liam,右为Noel


音乐&电影 | Tags: Liam Gallagher, Noel Gallagher, Oasis


[译文]在NetBeans IDE中增加CodeIgniter代码提示

八月 28, 2009 by admin | 0 Comment »

本文原文来自:

http://www.mybelovedphp.com/2009/01/23/netbeans-revisited-code-completion-for-code-igniter/

根据实际情况删减了少量内容,并增加了配图。在NetBeans 6.7.1简体中文版下面测试通过。转载此译文请注明出处。

    对于那些你喜欢的软件,一旦你开始使用它,你就会感觉它就像是为你度身定制的一样。每天你都会一点一点地发现它那隐藏的潜力。这就是开源的好处,还有很多潜在的能力等待我们去发现。大多数商业软件在它们的宣传手册上就已经列出了它们的特性,而最终你开始使用它们的时候你会非常失望。
    NetBeans 6.5是一款好软件,它提供了现成的代码完成和验证功能,支持PHP/HTML/CSS/JavaScript以及jQuery、MooTools等等。
    CodeIgniter是一个PHP快速开发框架,是一个灵活的类MVC系统。NetBeans为CI原生的ActiveRecord类、扩展库和辅助函数提供代码完成功能,帮助你简单地开发CodeIgniter程序。
    你必须先设置好它,下面我们会解释详细步骤:
    如果你将system目录移出了NetBeans项目中包含有application目录的源文件目录(建立多个站点时可能会这么做),那么这一步就是必不可少的。将CodeIgniter的system目录添加到NetBeans的全局包含目录:
选择“工具”>“选项”>“PHP”>“添加文件夹”

译者配图1 添加全局包含目录

译者配图1 添加全局包含目录

这样就可以启用辅助函数的代码完成功能,但是对ActiveRecord或者数据库类的函数不起作用。

$this->db->...

因此,必须将下面内容添加到控制器中:

/**
* @property CI_Loader $load
* @property CI_Form_validation $form_validation
* @property CI_Input $input
* @property CI_Email $email
* @property CI_DB_active_record $db
* @property CI_DB_forge $dbforge
*/
class Stylist extends Controller

现在你可以输入

$this->db->...

或者

$this->dbforge->...

你就会看到代码提示了。Wow!
为了进一步简化,请选择“工具”>“选项”>“编辑器”>“代码模板”:
1.
1.“新建” ->“缩写”:

Db

2.“扩展文本”:

$this->db->

2.
1. “新建” ->“缩写”:

`codei`

2.扩展文本:

/**
* @property CI_Loader $load
* @property CI_Form_validation $form_validation
* @property CI_Input $input
* @property CI_Email $email
* @property CI_DB_active_record $db
* @property CI_DB_forge $dbforge
*/

现在你就可以在NetBeans中输入’codei’+Tab或者’db’+Tab,就等同于

$this->db->

这样很酷,不是吗?

在前段时间的一篇文章里我展示了一种在NetBeans中支持对CodeIgniter框架进行代码完成的方法。… …也许最简单的方式是在CodeIgniter的application及system目录之外的某个路径下创建一个文件,可以命名为 netbeans_ci_code_completion.php,或者别的任何名字都可以,往文件里写入以下内容:

< ?php
/**
* @property CI_Loader $load
* @property CI_Form_validation $form_validation
* @property CI_Input $input
* @property CI_Email $email
* @property CI_DB_active_record $db
* @property CI_DB_forge $dbforge
* @property CI_Table $table
* @property CI_Session $session
* @property CI_FTP $ftp
* ....
 */
Class Controller {
}
?>

文件名可以随意,但是扩展名必须是 .php,因为这是给NetBeans而不是CI看的。你可以把它保存到一个名叫temp的目录下,或者也可以保存到.nbproject目录(NetBeans的项目目录)下面,保存到这个目录下的好处是这个目录下的内容不会被同步到服务器上。大多数情况下,我的项目的目录结构是这样的:

/application
/error
/images
/nbproject
/scripts
/styles
index.php
.htaccess
译者配图2 实际效果

译者配图2 实际效果


CodeIgniter, 译文 | Tags: CodeIgniter, NetBeans, 代码提示


CodeIgniter辅助函数 – 大写金额转换

八月 24, 2009 by admin | 0 Comment »

在做开发的时候可能会用到数字金额转大写金额这一功能,因此本人参考网上的一些函数,编了这么一个辅助函数,希望能帮得上大家:
< !-more->

&lt; ?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * CodeIgniter的人民币金额辅助函数
 * 其中num2rmb函数的作用是用于将阿拉伯数字金额转换为中文大写金额,如将120.50转换为“壹佰贰拾元伍角零分”
 * 请在控制器或视图中通过 $this-&gt;load-&gt;helper('rmb'); 来载入此辅助函数;
 */
if ( ! function_exists('num2rmb')) {
    function num2rmb($Arabic_numbers) {
        $Chinese_numbers=array('零','壹','贰','叁','肆','伍','陆','柒','捌','玖'); //中文大写数字
        //$oldval=$Arabic_numbers; <a href="http://www.yinzhili.com/2009/08/codeigniter-amount-in-words-helper.html#more-63" class="more-link">Read the rest of this entry &raquo;</a>

CodeIgniter | Tags: CodeIgniter, 大写


使用TCPDF输出完美的中文PDF文档

八月 20, 2009 by admin | 10 Comments »

TCPDF是一个用于快速生成PDF文件的PHP5函数包。TCPDF基于FPDF进行扩展和改进。支持UTF-8,Unicode,HTML和XHTML。在基于PHP开发的Web应用中,使用它来输出PDF文件是绝佳的选择。但毕竟这款开源软件是外国人开发的,对中文的支持总不是那么尽如人意,因此我们需要对它作进一步的增强。
首先要下载TCPDF。访问http://www.tcpdf.org ,单击导航条上的”Download”链接,即可下载到最新版本的TCPDF压缩包。因为里面包含了范例和字体,因此文件大概有10M左右。下载完后解压它,会得到一个名为tcpdf的目录,此目录的结构大概是这样的:

TCPDF目录结构图

TCPDF目录结构图

将此目录移动到Apache的网页根目录下(假设您使用的是Apache,并且使用80端口,如有不同请根据实际情况修改),打开浏览器,访问 http://localhost/tcpdf/ 应该就可以看到此目录下的文件和文件夹列表。由于TCPDF已经自带了一些范例,因此为了节省时间,我们可以直接对范例进行修改再使用。打开tcpdf目录下的examples目录,下面有50多个范例文件,其中example_038.php就是用来测试东亚字体的(比如简体/繁体中文、日文等等),打开此文件,找到$pdf->SetFont 这一行,修改为:

$pdf->SetFont('stsongstdlight', '', 20);

这一行代码的作用是设置PDF正文所用的字体及字号。其中”stsongstdlight”表示”STSongStdLight”字体,这是Adobe Reader的默认简体中文字体,TCPDF中已经内置这个字体的配置文件,我们只需直接调用即可。接下来,将$pdf->Cell那一段修改为:

$pdf->Cell(0, 10, '敏捷的棕毛狐狸跃过那只懒狗。', '',1, 1, 'C');
$pdf->Cell(0, 10, 'The quick brown fox jumps over the lazy dog.', '',1, 1, 'C');
$pdf->Cell(0, 10, '1234567890', '',1, 1, 'C');

保存,然后访问 http://localhost/tcpdf/examples/example_038.php 就可以生成一份PDF文档了:

使用默认中文字体生成的PDF文件

使用默认中文字体生成的PDF文件

这种方式生成的PDF文件的优点是:文件体积小,生成快速。但也有缺点是,没有嵌入中文字体,只限于安装了Adobe Reader之后才能正常显示。那万一用户使用的是FoxIt Reader或者是Linux操作系统呢?显示效果就不一样了。因此,为了保证生成的PDF文件在任何环境下都有同样的显示效果,嵌入字体是必需的。
Windows下有很多中文字体,但是我们要用在TCPDF中的中文字体有下面几个要求:

  • 支持Unicode,因为TCPDF支持的是Unicode;
  • 体积越小越好;
  • 最好是也支持繁体中文;

这样看来,微软雅黑以及方正的一些字体都符合要求。但是他们都是商业字体,而且个头都不小,以微软雅黑为例,msyh.ttf 文件就超过10M,如果使用它,生成的PDF文件体积也会很大。
综合考虑,我觉得”Droid Sans Fallback”字体符合要求:

  • 首先它是免费字体;
  • 其次它也是Unicode编码,支持简体繁体中文以及日文韩文等等;
  • 然后它的体积很小,不超过5M。

然而TCPDF不支持TTF字体文件,因此我们先将它转换成TCPDF支持的格式,然后再使用。在TCPDF目录下有个fonts子目录,这个子目录下又有个utils,这里面带有一个字体转换工具ttf2ufm.exe。下面是转换的步骤:
在网上很容易找到Droid Sans Fallback字体的下载链接,因此在这里就没有必要多做描述了。我们把下载到的 DroidSansFallback.ttf 复制到 TCPDF\fonts\utils 下面,然后打开Windows的命令行,切换到此路径下,输入如下命令:

D:\www\tcpdf\fonts\utils>ttf2ufm -a -F DroidSansFallback.ttf

等待一段时间,等到命令行窗口显示

"Finished - font files created"

之后,可以发现此目录下生成了DroidSansFallback.afm,DroidSansFallback.t1a 和 DroidSansFallback.ufm 这三个文件。
在命令行中输入

"C:\Program Files\WAMP\PHP5\php.exe" -q makefont.php DroidSansFallback.ttf DroidSansFallback.ufm

说明:这里的”C:\Program Files\WAMP\PHP5\php.exe”为php.exe文件所在的路径,请根据实际情况输入。回车运行之后,稍等片刻,命令行窗口中会提示

Font definition file generated

至此大功告成。将生成的droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z这三个文件复制到 TCPDF\fonts 下面即可。
打开example_038.php文件,将

$pdf->SetFont('stsongstdlight', '', 20);

修改为

$pdf->SetFont('droidsansfallback', '', 20);

这样就能够调用我们刚才生成的字体,再访问 http://localhost/tcpdf/examples/example_038.php 就可以看到重新生成的PDF文档。

嵌入DroidSansFallback字体后的PDF文档

嵌入DroidSansFallback字体后的PDF文档


PHP | Tags: DroidSansFallback, pdf, tcpdf


Techified主题的footer文件解密版

八月 19, 2009 by admin | 4 Comments »

众所周知Wordpress是一个开放的平台,各种免费和收费的主题层出不穷。其中有一款名叫”Techified”的主题我非常喜欢,现在我用的就是它。然而这款主题的作者为了保留版权信息,居然将footer部分加密,我无法猜测他用的是什么算法(因为我用Base64解密程序是无法将它解密的),总之直接解密可能会很麻烦,但是就像很多站长那样,我们都希望在footer部分加入一些信息,比如备案信息或者统计代码之类。幸好在一个论坛上(抱歉,我都忘了是哪个论坛了)发现一位高手写了一份解密版的代码,我试着用在了现在的主题上,确实可用,因此在这里共享一下:

1
2
3
4
5
6
7
8
9
 
<div id="footer_area"><div id="footer_area_content">
                        < ?php include (TEMPLATEPATH . '/footer_content.php'); ?> 
                </div>
        </div>
        <div id="footer_bottom">
                <div id="footer_bottom_content"> Copyright &copy; < ?php echo gmdate(__('Y')); ?> <a href="<?php echo get_settings('home'); ?>">< ?php bloginfo('name'); ?></a>. <a href="http://www.technologytricks.com/techified-just-another-premium-wordpress-themes/">Techified</a> theme by <a href="http://www.ifreecellphones.com/">Cell Phones</a>. Supported by <a href="http://www.ifreecellphones.com/cheap-verizon-wireless-phones.asp">Verizon Wireless</a>, <a href="http://www.ifreecellphones.com/cheap-t-mobile-phones.asp">T-Mobile</a> &amp; <a href="http://www.ifreecellphones.com/cheap-sprint-pcs-phones.asp">Sprint</a>
</div>
        </div>

说明:请尊重设计者的劳动成果,在这一文件的基础上添加自己的信息就可以了,不要修改或删除作者原有的链接。

补充说明:网友 最后块烧饼 提醒说,上面这段代码可能会引发错位问题,虽然我测试时没有遇到,但还是感谢他/她给予的指正。你可以在 这里 看到他/她制作的完美版。


Web | Tags: footer, techified, Wordpress


在CodeIgniter中使用pChart

八月 16, 2009 by admin | 0 Comment »

pChart是一个免费的PHP图表生成库,可以生成多种图表如饼图或者柱状图等等,需要GD库的支持。下面我来简单讲讲如何在CI中方便地使用它。

首先我们要下载pChart。访问http://pchart.sourceforge.net/download.php 就可以下载到最新版的pChart,目前最新的版本是1.27。解压下载到的文件,我们要用到的只是其中的pChart文件夹,里面有pChart.class、pCache.class和pData.class这三个文件。我们把pChart文件夹复制到 application/libraries/ 下面。

然后要准备字体,因为我们做报表很可能要输出中文,所以必须使用一种中文字体,至于选什么字体就看你的喜好了(如果是商业用途的话请注意字体的版权以免引起版权纠纷),把中文字体的ttf文件复制到 application/libraries/pChart 下面即可。

通过库的形式来使用pChart,因此在 application/libraries/ 下面创建一个文件,命名为 Chart.php,代码如下:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
< ?php
class Chart {
    function Chart() {
        include(APPPATH."libraries/pChart/pData.class");
        include(APPPATH."libraries/pChart/pChart.class");
    }
    function draw_line_graph($params) {
        $DataSet = new pData;
        $DataSet->AddPoint($params['data'],"Serie1");  //需要显示的数据
        $DataSet->AddPoint($params['date'],"Serie2"); //横坐标的数据
        $DataSet->AddSerie("Serie1");
        $DataSet->SetAbsciseLabelSerie("Serie2");
        $DataSet->SetSerieName("订单总金额","Serie1");
        $DataSet->SetYAxisName("RMB"); //纵坐标上显示的文字
        $DataSet->SetXAxisName('横坐标:日期'); //横坐标上显示的文字
        $DataSet->SetXAxisFormat("date"); //横坐标的数据类型
 
        $Test = new pChart($params['height'],$params['width']); //图表文件的高度和宽度
        $Test->setDateFormat($params['date_format']); //横坐标显示的日期格式
        $Test->setColorPalette(0,255,0,0);
 
        $Test->setFontProperties(APPPATH."libraries/pChart/FZLTXIHK.ttf",12); //设置使用的字体及字号
        $Test->setGraphArea(60,60,$params['x_area'],$params['y_area']); //图形区域的高度和宽度
        $Test->drawGraphArea(252,252,252); //线的颜色
        $Test->drawScale($DataSet->GetData(),$DataSet->GetDataDescription(),SCALE_NORMAL,150,150,150,TRUE,0,2);
        $Test->drawGrid(4,TRUE,230,230,230,255);
 
        $Test->drawLineGraph($DataSet->GetData(),$DataSet->GetDataDescription());
        $Test->drawPlotGraph($DataSet->GetData(),$DataSet->GetDataDescription(),3,2,255,255,255);
        $Test->setFontProperties(APPPATH."libraries/pChart/FZLTXIHK.ttf",8); //设置数据值所用字体及字号
        $Test->writeValues($DataSet->GetData(),$DataSet->GetDataDescription(),"Serie1"); //输出每个点的数据值
 
        $Test->setFontProperties(APPPATH."libraries/pChart/FZLTXIHK.ttf",11); //设置使用的字体及字号
        $Test->drawLegend(75,65,$DataSet->GetDataDescription(),255,255,255);
 
        $Test->setFontProperties(APPPATH."libraries/pChart/FZLTXIHK.ttf",12); //设置使用的字体及字号
        $Test->drawTitle(60,22,$params['title'],50,50,50,585);
 
        $imagefile='public/temp/'.$params['filename'].'.png'; //设置生成文件的保存路径
        $Test->Render($imagefile);   //生成文件
 
      return $imagefile;  //返回文件名
    }
}

然后控制器中这样调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function test(){
     $this->load->library('chart'); //载入pChart库
 
   $params['data']=array(100,200,150,600,230,150,510); //要显示的数据
   for($i=0;$i&lt;7;$i++){
         $params['date'][$i]=1250217066+$i*86400; //要显示的日期,注意这里是Unix时间戳,pChart会自动传换成你要的格式
  }
    $params['title']='销售报表'; //图片标题
   $params['date_format']='m月j日';//设置日期格式
   $params['filename']='test_image';  //文件名     
   $params['height']=600; //高度
   $params['width']=300; //宽度
   $params['x_area']=560; //图形区域高度
   $params['y_area']=280; //图形区域宽度
   $data['chart_image']=$this->chart->draw_line_graph($params);//生成图片
   $data['baseurl']=site_url();
    $this->load->view('test_view.html',$data);
}

视图中输出就很简单了:

1
2
3
4
5
6
<html>
<head><title></title></head>
<body>
<img src="<?php echo $baseurl.$chart_image;?/>" />
</body>
</html>

关于pChart的更多用法,请参考它的在线文档:

http://pchart.sourceforge.net/documentation.php


CodeIgniter | Tags: CodeIgniter, pChart


[译文]Francis Healy小传

八月 11, 2009 by admin | 0 Comment »

这是从我过去的博客转过来的一篇文章,英文原文来自维基百科,译文是我很久以前翻译的了,可能现在英文维基百科已经有了新的内容。欢迎转载,但请注明出处,谢谢。

Fran Healy

Fran Healy

Francis (Fran) Healy (1973年7月23日出生于英格兰的斯塔福郡) 是一名苏格兰音乐人。目前他是苏格兰乐队Travis的主唱和主要的歌曲创作者。乐队所发行的五张录音室专辑里的几乎所有歌曲都是由他创作的。

音乐

他被看作是英国最佳的创作人和作曲家之一,他的歌曲创作曾经得到很多艺人的公开赞扬,这些人包括Paul McCartney, Elton John 和 Noel Gallagher (英国Oasis乐队成员)。2005年,酷玩乐队的主唱Chris Martin称自己为“a poor man’s Fran”。在一些访谈中,Fran谈到过那些影响自己的音乐人,比如Joni Mitchell, Paul McCartney 以及 Graham Nash 。Fran还与McCartney 和 Nash一起同台演出过。虽然比较擅长吉它,但是最近他也开始更多地使用钢琴。

Travis

Fran所属的乐队,Travis,是一支来自苏格兰格拉斯哥的另类摇滚乐队。乐队的成员还包括Dougie Payne, Andy Dunlop 以及Neil Primrose。作为英国最受欢迎和尊敬的现代乐队之一,Travis已经两次得到全英音乐奖“年度最佳专辑”的提名,并且常常被认为是诸如Coldplay和Keane这样的英伦乐队的引路人。从1997年的《Good Feeling》开始,他们已经发行了五张录音室专辑,在评论界和商业上都获得了巨大的成功,而他们的现场演出也为人称道。除音乐外,这支可爱的、淳朴而又清新的乐队更是引起了大家的注意。自2003年发行的《12 Memories》之后,他们邀请了Radiohead以及最近担任过Paul McCartney 制作人的Nigel Godrich来为他们新专辑操刀。这几乎是他们出道以来的第十个年头了。

传记

虽然出生于英格兰的斯塔福郡,Fran却是在苏格兰的格拉斯哥长大的,——那是他父母的家乡。她母亲和她那有家庭暴力倾向的丈夫离婚之后,带着他搬回到苏格兰居住。正是由于他父亲的这种恶劣行为,Fran始终不愿和他的父亲有任何联系。Fran说过,儿时对他影响最大的两个人就是他母亲和外祖母。Fran的中学生涯是在格拉斯哥的Holyrood中学度过的。

上小学时,有一次他穿着裙子演唱了那首苏格兰老歌《Westering Home》,这次演唱获了奖——奖品是一本彭斯的诗集,还有一本“杰出歌唱才能”的证书。但是直到他十几岁之前,他对唱歌都没有多少兴趣。

他对音乐的狂热爱好始于1986年,那年他13岁,在看过了Roy Orbison 在《The Last Resort With Jonothan Ross》中演唱了那首著名的《Pretty Woman》之后, Fran买了自己的第一把吉它。起初他用吉它演奏的是一些摇滚老歌,比如《Johnny B. Good 》以及Eddie Cochran的《3 Steps To Heaven》。他写的第一首完整的歌是关于他所在学校的校长Peter Mullin的,取名为《Mr. Mullin Blues》,歌词是这样的:
“…and there was Pete Mullin, with his pie and beans. It was then I smelled it, it filled the room. Then some wee bugger lit a match and the whole place went Ka-BOOM…Where’s your tie boy, Pick up that can. Get in line girl, do you understand…Cause his name is big Pete Mullin…And he’s a man”

他在学校的才艺表演中演唱了这首歌,但却没能打动评委。他参加过不少学校的乐队,直到后来,格拉斯哥的乐队Glass Onion的鼓手问他是否想去参加他们的试音。这支乐队后来成为Travis,这个名字来源于Wim Wenders的电影《Paris,Texas》主人公的名字。

Travis的首支单曲,《All I Want to Do Is Rock》,是Fran在一次前往Greater Cumbrae(克莱德湾的一个小岛)的途中写下的。到那儿去的唯一目的是写一首好歌,Fran也不知道那些灵感到底是怎么来的。尽管从此之后他就以创作人的身份获得了巨大成功,他却从未接受过正式的音乐训练。随着乐队的崭露头角,Fran一直是Travis的主要歌曲创作者,同时也是乐队的发言人以及成员当中最引人注目的一个。

从2000年开始,德国摄影家、前化妆师Nora Kryst成为他的女友和未婚妻。2006年3月,他们的第一个孩子,这个名叫Clay的小男孩诞生了。儿子随母亲姓Kryst。他们住在伦敦,但是他们在纽约的SoHo区也购置了一套公寓。最近在慕尼黑演出时,他还透露过自己将来打算移民到德国去。

行为主义

Fran参与了”让贫穷成为历史”这一运动,还参演了在伦敦和爱丁堡举行的Live 8音乐会。他还参与了慈善歌曲《Do They Know It’s Christmas?》的录制,Fran和他的朋友Nigel Godrich还是这次活动的组织者。

到目前为止他曾经两次随“拯救儿童组织”前往苏丹,这是全球最大规模的一次目的在于为上千万儿童提供救助的运动。

Fran也参加了多次反对伊拉克战争的游行运动,并担任过那些运动的发言人。

杂项

Fran的音乐受Joni Mitchell, Paul McCartney 和 Graham Nash的影响。他非常喜欢Arcade Fire乐队。同时他也非常喜欢单口相声(stand-up comedy)。

小时候Fran就已经赢得了空手道黑带。


译文 | Tags: Fran Healy, Travis, 传记


CodeIgniter辅助函数-敏感词过滤

八月 5, 2009 by admin | 0 Comment »

我们都知道有些敏感的词汇是不适合出现在互联网上的,特别是在有用户留言或发帖的一些站点,如博客或者论坛,如果出现了敏感词,那将是一件十分麻烦的事情。所以如果你打算用CodeIgniter开发这类站点,对用户输入的内容就必须加以过滤,因此本人就编写了这样一个辅助函数,这可是真真正正有“中国特色”的辅助函数。原理很简单,本质上说就是替换字符串,并没有国内一些大型论坛那么智能,如果需要更智能的过滤方法,就需要用正则表达式对用户的输入内容进行分析了,当然这里并没有用到。

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
31
32
33
34
 
< ?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
 * CodeIgniter的关键字过滤函数
 * 用于在字符串中过滤一些敏感关键字
 * 请在控制器或视图中通过 $this-&gt;load-&gt;helper('filter'); 来载入此辅助函数;
 *
 *
 */
 
if ( ! function_exists('clean')) {
    function clean($string) {
        //请自行增减此数组内容,以达到最好过滤效果
        $keywords= array(
            'shit' => 's**t',
            'Shit' => 'S**t',
            'twat' => 't**t',            
            '他妈的' => 'TMD',
            '狗日的' => '狗X的',
            'X你妈' => '草泥马',
            '躲猫猫' => '朵猫猫',
            '70码' => '欺实马',
            'Yamete' => '雅蔑蝶',
            'fuck you' => '法克鱿',
            '叉腰肌' => '猹妖鸡',            
            '90后' => '九岭猴',
            '傻B' => '傻X'            
           );
        return strtr($string, $keywords);
    }
}
 
/* filter_helper.php 文件结束 */
/* 本文件的位置应该是: ./system/application/helpers/filter_helper.php */

CodeIgniter | Tags: CodeIgniter, helper, 过滤


[转载] -IT孔乙己

八月 4, 2009 by admin | 0 Comment »

        鲁镇的电脑城的格局,是和别处不同的:都是当街一些兼容机装机铺,柜里面预备着电脑配件,可以随时装机,楼上就是D版市场。打工的人,傍午傍晚下了班,每每花四元钱,买一张D盘,——这是四年前的事,现在每张涨到了五元,——靠柜外站着,慢慢的选了回去装;倘肯多花两元,便可以买一碟盒装的,如果出到十几元,那就能买一样精装盒装D盘,但这些顾客,多是学生帮,大抵没有这样阔绰。只有穿西装的,才踱进柜台里,要这要那,慢慢地坐着选。

       我从十六岁起,便在三楼的D版柜台里打工,老板娘说,学历太低,怕应付不了西装VIP客户,就在外面做点事罢。外面的学生,虽然容易说话,但唠唠叨叨缠夹不清的也很不少。他们往往要亲眼看着盘从纸壳里取出,看过盘面里有划痕没有,又亲看将盘放在光驱里,看读得出来不,然后放心:在这严重监督下,卖坏盘也很为难。所以过了几天,老板娘又说我干不了这事。幸亏介绍人的情面大,辞退不得,便改为专管收钱的一种无聊职务了。

        我从此便整天的站在柜台里,专管我的职务。虽然没有什么失职,但总觉得有些单调,有些无聊。老板娘是一副凶脸孔,客户也没有好声气,教人活泼不得;只有孔乙己到店,才可以笑几声,所以至今还记得。

        孔乙己是站着选盘而穿西装的唯一的人。他身材很高大;青白脸色,腋下时常夹些广告;一部乱蓬蓬的花黑的头发。穿的虽然是西装,可是又脏又旧,似乎十多天没有熨,也没有干洗。他对人说话,总是满口IT术语,教人半懂不懂的。因为他姓孔,别人便从五笔速成软件中的“上大人孔乙己”这半懂不懂的话里,替他取下一个绰号,叫作孔乙己。孔乙己一到店,所有选盘的人便都看着他笑,有的叫道,“孔乙己,你脸上又贴上新胶布了!”他不回答,对柜里说,“拿两张番茄花园,要一张Office 2003。”便排出几张RMB。他们又故意的高声嚷道,“你一定又偷了人家的东西了!”孔乙己睁大眼睛说,“你们怎么这样凭空污人清白……”“什么清白?我前天亲眼见你偷了何老板的内存,追着打。”孔乙己便涨红了脸,额上的青筋条条绽出,争辩道,“窃配件不能算偷……窃配件!……IT人的事,能算偷么?”接连便是难懂的话,什么“DIY固穷”,什么“攒机”之类,引得众人都哄笑起来:店内外充满了快活的空气。

        听人家背地里谈论,孔乙己原来也上过大学,但终于没有读研,又不会经商;于是愈过愈穷,弄到将要吃低保了。幸而打得一手好五笔,便替人家打打字,换一碗饭吃。可惜他又有一样坏脾气,便是好吃懒做。坐不到几天,便连人和主机显示器键盘鼠标,一齐失踪。如是几次,叫他打字的人也没有了。孔乙己没有法,便免不了偶然做些偷窃的事。但他在我们店里,品行却比别人都好,就是从不拖欠;虽然间或没有现钱,暂时记在账本上,但不出一月,定然还清,从账本上划去了孔乙己的名字。

        孔乙己选过几张,涨红的脸色渐渐复了原,旁人便又问道,“孔乙己,你当真会电脑么?”孔乙己看着问他的人,显出不屑置辩的神气。他们便接着说道,“你怎的连半个工作也找不到呢?”孔乙己立刻显出颓唐不安模样,脸上笼上了一层灰色,嘴里说些话;这回可是全是IT术语,一些不懂了。在这时候,众人也都哄笑起来:店内外充满了快活的空气。

        在这些时候,我可以附和着笑,老板娘是决不责备的。而且老板娘见了孔乙己,也每每这样问他,引人发笑。孔乙己自己知道不能和他们谈天,便只好向孩子说话。有一回对我说道,“你会电脑么?”我略略点一点头。他说,“会电脑,……我便考你一考。微软最新的桌面操作系统是什么?”我想,民工一样的人,也配考我么?便回过脸去,不再理会。孔乙己等了许久,很恳切的说道,“不知道吧?……我教给你,记着!这些知识应该记着。将来做老板的时候,装系统要用。”我暗想我和老板的等级还很远呢,而且我们老板娘也从不用电脑管账;又好笑,又不耐烦,懒懒的答他道,“谁要你教,不就是Vista么?”孔乙己显出极高兴的样子,将两张光盘敲着柜台,点头说,“对呀对呀!……Windows Vista有四个版本,你知道么?”我愈不耐烦了,努着嘴走开。孔乙己刚拿起柜台上的一支圆珠笔,按出笔尖,想在柜上写字,见我毫不热心,便又叹一口气,显出极惋惜的样子。

        有一回,附近的老婆婆们看到他有广告纸,拦住了孔乙己。他便给她们广告纸,一人一张。老婆婆们接过纸,仍然不走,眼睛都望着孔乙己手里的农夫山泉。孔乙己着了慌,想一口气将水喝完,说道,“等一下,不多了,水已经不多了。”停下来又看一看瓶子,自己摇头说,“不多不多,多乎哉?不多也!”于是一位老婆婆接过空瓶在笑声里走开了。

        孔乙己是这样的使人快活,可是没有他,别人也便这么过。

        有一天,大约是中秋前的两三天,老板娘正在慢慢的结账,放下计算器,忽然说,“孔乙己长久没有来了。还欠十九元钱呢!”我才也觉得他的确长久没有来了。一个选盘的人说道,“他怎么会来?……他打折了腿了。”老板娘说,“哦!”“他总仍旧是偷。这一回,是自己发昏,竟偷到丁丁网吧里去了。他家的东西,偷得的么?”“后来怎么样?”“怎么样?先是写了检查,后来几个保安还是打,打了大半夜,打折了腿。”“后来呢?”“后来打折了腿了。”“打折了怎样呢?”“怎样?……能怎样?许是挂了。”老板娘也不再问,仍然慢慢的算她的账。

        中秋节之后,秋风是一天凉比一天,看看将近初冬;我整天的搂着暖水壶,也须穿上防寒服了。一天的下半天,没有一个顾客,我正合了眼坐着。忽然间听得一个声音,“拿一张盘。”这声音虽然极低,却很耳熟。看时又全没有人。站起来向外一望,那孔乙己便在柜台下对了门槛坐着。他脸上黑而且瘦,已经不成样子;穿一件破夹克,盘着两腿,下面坐一个滑车,用尼龙绳在肩上挂住;见了我,又说道,“拿一张免激活的Vista。”老板娘也伸出头去,一面说,“孔乙己么?你还欠十九元钱呢!”孔乙己很颓唐的仰面答道,“这……下回还清罢。这一回是现钱,盘要好。”老板娘仍然同平常一样,笑着对他说,“孔乙己,你又偷了东西了!”但他这回却不十分分辩,单说了一句“不要取笑!”“取笑?要是不偷,怎么会打断腿?”孔乙己低声说道,“车祸,撞,撞……”他的眼色,很像恳求老板娘,不要再提。此时已经聚集了几个人,便和老板娘都笑了。我用塑料袋装好盘,拎出去,放在地上。他从光盘包里摸出四元钱,放在我手里,见他满手是灰,原来他便用这手划来的。少顷,他装好盘,便又在旁人的说笑声中,坐着用这手慢慢划去了。

        自此以后,又长久没有看见孔乙己。到了春节,老板娘翻开账本说,“孔乙己还欠十九元钱呢!”

        到第二年的五一,又说“孔乙己还欠十九元钱呢!”到元旦可是没有说,再到春节也没有看见他。

        我到现在终于没有见——大约孔乙己的确挂了。


杂谈 | Tags: IT, 孔乙己


CodeIgniter自定义扩展-XML库

八月 3, 2009 by admin | 0 Comment »

这是用于CodeIgniter的XML扩展库,用来解析XML文档,修改里面的结点以及获取结点内容。原版来自:http://codeigniter.com/wiki/Xml_Library/,当然原版只有基本的解析XML功能,我对这个类进行了一点扩展,可以满足通常情况下的需要了。

代码如下:

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
< ?php  if (!defined('BASEPATH')) exit('No direct script access allowed');
 
/**
 * 用于CodeIgniter的XML解析库
 *
 * 提供XML文档哦解析和修改结点值的功能。
 * 注意:此库仅适用于PHP5。
 * @author: (原作者)Woody Gilk   (注释及扩展): yinzhili
 * @version 1.0
 *
 * 许可: http://creativecommons.org/licenses/by-sa/2.5/
 * URL: http://codeigniter.com/wiki/Xml_Library/
 *
 * 说明: 请通过以下方式来加载这个类库:$this->load->library('xml');
 *
 */
 
class Xml {
    function Xml () {
    }
 
    private $document;
    private $filename;
 
    public function load($file) {
    /**
     * 载入需要解析的XML文件
     *
     * $file:需解析的XML文件及其路径(请省略 .xml 扩展名,此处路径为相对于 APPPATH 的路径)
     * 例如:test.xml 文件保存在 application/config/test.xml 这个位置,那么 $file='config/test.xml' 。
     * 请确保路径正确,否则无法解析。
     */
        $bad  = array('|//+|', '|\.\./|');
        $good = array('/', '');
        $file = APPPATH.preg_replace ($bad, $good, $file);//生成需要解析的.xml文件的完整路径
 
        if (! file_exists ($file)) {
            return false; //如果在指定位置找不到要解析的.xml文件,返回false
        }
 
        $this->document = file_get_contents($file); //将整个文件读入字符串
        $this->filename = $file;
 
        return true;
    }  /* load函数结束 */
 
    public function parse() {
    /***
     * @public
     * 对一个XML文档进行解析,结果存入数组
     */
        $xml = $this->document;
        if ($xml == '') {
            return false; //如果XML内容为空,则返回false
        }
 
        $doc = new DOMDocument ();
        $doc->preserveWhiteSpace = false;
        if ($doc->loadXML ($xml)) {
            $array = $this->flatten_node ($doc);
            if (count ($array) > 0) {
                return $array;
            }
        }
 
        return false;
    } /* parse函数结束 */
 
    private function flatten_node($node) {
    /***
     * @private(私有函数)
     * 将XML文档解析为一个数组
     */
 
        $array = array();
 
        foreach ($node->childNodes as $child) {
            if ($child->hasChildNodes ()) {
                if ($node->firstChild->nodeName == $node->lastChild->nodeName && $node->childNodes->length > 1) {
                    $array[$child->nodeName][] = $this->flatten_node ($child);
                }
                else {
                    $array[$child->nodeName][] = $this->flatten_node($child);
 
                    if ($child->hasAttributes ()) {
                        $index = count($array[$child->nodeName])-1;
                        $attrs =& $array[$child->nodeName][$index]['__attrs'];
                        foreach ($child->attributes as $attribute) {
                            $attrs[$attribute->name] = $attribute->value;
                        }
                    }
                }
            }
            else {
                return $child->nodeValue;
            }
        }
        return $array;
    }
    /*  node_to_array函数结束 */
 
 
    public function set($file,$node,$new_value) {
    /**
     * @public(公有函数)
     * 修改XML文档中某个节点的值
     * 各个参数含义如下: $file为要修改的XML文件,$node为要修改其值的结点名称,$new_value为新值
     * 如果修改成功,函数将返回true
     */
        $bad  = array('|//+|', '|\.\./|');
        $good = array('/', '');
        $file = APPPATH.preg_replace ($bad, $good, $file);//生成需要解析的.xml文件的完整路径
 
        if (! file_exists ($file)) {
            return false; //如果在指定位置找不到要解析的.xml文件,返回false
        }
        else {
            $xml = new DOMDocument(); //实例化DOMDocument对象
            $xml->load($file); //加载XML文件
            if($xml->getElementsByTagName($node)!=null) { //如果XML文件中存在相应结点
                foreach($xml->getElementsByTagName($node) as $list) {
                    $list->nodeValue=$new_value;//将结点的值修改为参数中给出的新值
                    $xml->save($file);//保存修改之后的文件
                    return true; //返回true
                }
            }
            else {
                return false; //如果找不到参数中给出的结点,则返回false;
            }
        }
    }
    /* update函数结束 */
 
 
    public function get($file,$node) {
    /**
     * @public(公有函数)
     * 获取XML文档中某个节点的值
     * 各个参数含义如下: $file为要修改的XML文件,$node为要获取其值的结点名称
     * 如果修改成功,函数将返回获取结果
     */
        $bad  = array('|//+|', '|\.\./|');
        $good = array('/', '');
        $file = APPPATH.preg_replace ($bad, $good, $file);//生成需要解析的.xml文件的完整路径
 
        if (! file_exists ($file)) {
            return false; //如果在指定位置找不到要解析的.xml文件,返回false
        }
        else {
            $xml = new DOMDocument(); //实例化DOMDocument对象
            $xml->load($file); //加载XML文件
            if($xml->getElementsByTagName($node)!=null) { //如果XML文件中存在相应结点
                foreach($xml->getElementsByTagName($node) as $list) {
                    return $list->nodeValue;//返回结果
                }
            }
            else {
                return false; //如果找不到参数中给出的结点,则返回false;
            }
        }
    }
 
}
 
/*
 * XML.php 文件结束。此文件的正确保存路径应该是 application/libraries/XML.php
 * 请注意: 此处省略 ?> 闭合标签是为了避免出现错误,并非遗漏。
 */

请将此文件保存在此路径下: application/libraries/XML.php ,然后通过

1
$this->load->library('xml');

来加载这个扩展就可以了。


CodeIgniter | Tags: CodeIgniter, XML


IT狂人的博客

  • 声明

    本博文章及相关作品(包括但不限于文字、图片),除特别说明为转载外,均属本人原创,依据《国家知识产权法》、《著作权法》和《信息网络传播权保护条例》,原创知识产权、版权均为本人所有,本人享有著作权,并受法律保护。

    文章欢迎转载,但请事先与本人联系:email
    未经本人许可,任何人不得转载或使用整体或任何部分的内容。未尽事宜,依据相关法律法规处理。

  • 分类目录

    • ASP .Net (1)
    • CodeIgniter (8)
    • PHP (8)
    • Web (5)
    • 未分类 (1)
    • 杂谈 (4)
    • 译文 (7)
    • 音乐&电影 (1)
  • 文章索引模板

    • 2010年七月 (5)
    • 2010年五月 (1)
    • 2010年四月 (1)
    • 2010年三月 (2)
    • 2010年二月 (1)
    • 2010年一月 (2)
    • 2009年十二月 (1)
    • 2009年十月 (2)
    • 2009年九月 (3)
    • 2009年八月 (10)
  • 标签

    AJAX API AVC CakePHP CHM CodeIgniter CURD Django DroidSansFallback eaccelerator footer Framework Fran Healy Git helper IT Kohana MVC MVP MYSQL NetBeans Oasis ORM pChart pdf PHP phpMyAdmin Ruby tcpdf techified time Travis Twitter Web windows Wordpress XML Zend 传记 外链 大写 孔乙己 框架 盗链 过滤
  •  

    2009年八月
    一 二 三 四 五 六 日
        九 »
     12
    3456789
    10111213141516
    17181920212223
    24252627282930
    31  
  • Playlist


  • 最近评论

    • cnenc 在 使用PHP的Glob()函数来遍历文件夹 上的评论
    • TCPDF开源项目 - PDF - php开源项目 - php免费pdf生成软件 - php开源软件 - TCPDF - 开源网 在 使用TCPDF输出完美的中文PDF文档 上的评论
    • 匿名 在 在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载) 上的评论
    • 笑话大王 在 使用TCPDF输出完美的中文PDF文档 上的评论
    • admin 在 在Windows下编译适用于PHP 5.2.12及5.2.13的eAccelerator.dll(附下载) 上的评论
  • 链接

    • cnBeta.COM
    • CodeIgniter 中国
    • jQuery中文社区
    • Lily Allen
    • Mtime时光网
    • W3School
    • 小众软件
    • 破烂熊乐园
    • 韩寒
Copyright © 2010 IT狂人的博客 All Rights Reserved. XHTML CSS THEME by I SOFTWARE REVIEWS