+ -
当前位置:首页 → 问答吧 → [不断更新]打算一直在这里写技术文章。我是菜鸟,高手莫砸

[不断更新]打算一直在这里写技术文章。我是菜鸟,高手莫砸

时间:2006-05-25

来源:互联网

打算一直在这里写技术文章,请大家多多支持,不过为了大家能够流畅的查看,   
请大家精神上支持就好了,不用发“支持”,“顶”,“不错”,之类的回帖。
当然,有错漏的地方,还请高手们多多指出,谢谢。

顺便再次声明一下:我是菜鸟,高手末砸

[[i] 本帖最后由 machine_马 于 2006-5-31 05:41 编辑 [/i]]

作者: machine_马   发布时间: 2006-05-24

hao ding

作者: mayi   发布时间: 2006-05-25

$page_obj=new page($title_count$current_page);
老大你的page类在哪里呢?

作者: forest   发布时间: 2006-05-25

这次改后machine_page类又不见了,呵呵,楼主看看!

作者: forest   发布时间: 2006-05-25

帮你加了个 code 引用。

作者: PHPChina   发布时间: 2006-05-30

code引用怎么不行啊?

作者: forest   发布时间: 2006-05-30

以前能用的啊,我测试一下:
复制内容到剪贴板
代码:
The code test!

作者: forest   发布时间: 2006-05-30

/************************************************************************

   最近在做点东西,涉及到分页,老是使用面向过程的也不是办法,由于刚学不久,
   看得代码不多,也就没怎么去搜别人的分页类。再加上上次看了几个,看得眼睛
   花花的,所以就自己写了一个。个人感觉它使用起来还是蛮简单的,
   最少两行就可以完成分页的准备工作了,大家可以看看。如果结合smarty
   使用,则更加方便。不过考虑到不是每个人都使用smarty,所以这里只给出了普通
   的使用例子。相信使用smarty的朋友,也能很轻松的操作这个类。
   希望能帮到大家

************************************************************************/
复制内容到剪贴板
代码:
<?

class machine_page{
var $title_count=0;//帖子总数
var $title_rows=10;//每页显示多少行
var $show_page=7;//每页显示多少个跳转页号
var $page_count=0;//共有多少页
var $current_page=1;//当前页
var $start=0;//开始记录
var $prve_lpage=0;//上一大页
var $next_lpage=0;//下一大页
var $page_arr=array();//开始记录

  function machine_page($count,$current_page=1,$title_rows=10,$show_page=7){//构造函数

    $this->title_count=(int)$count;//获取传入的帖子总数

    $this->current_page=(int)$current_page;//获取当前页

    $this->title_rows=(int)$title_rows;//显示多少行

    $this->show_page=$show_page;//每页显示多少个跳转页号

    $this->count_page();//调用计算页数的方法

    $this->return_page_arr();//调用返回跳转页号的方法

  }

  function count_page(){//计算页数

    //计算共有多少页
    @$this->page_count=ceil($this->title_count/$this->title_rows);

    //防止$this->title_rows意外等于0时的错误
    $this->page_count=(int)$this->page_count;

    //如果当前页大于最大页数,则使其等于最大页数;如果当前页小于1,则使其等于1
    if ($this->current_page>$this->page_count)$this->current_page=$this->page_count;
    if ($this->current_page<1)$this->current_page=1;

    //计算查询的开始记录数
    $this->start=($this->current_page-1)*$this->title_rows;

  }

  function return_page_arr(){//返回页面跳转页号的函数

    //用当前页除以显示页数得到当前是第几“大页”
    $start_s=floor($this->current_page/$this->show_page);

    /*
      如果当前页号正好整除显示页数,则应该对$start_s减一,因为设想一下,如果当前是第7页
      显示页数也是7,则$start_s=1,也就是说已经到了第二“大页”了,而实际上它应该还是在
      第一“大页”
    */
    if ($this->current_page%$this->show_page==0)$start_s--;

    //计算开始页号,算法是当前“大页”*显示页数+1;例如0*7+1=1,1*7+1=8,2*7+1=15
    $start_page=$start_s*$this->show_page+1;
   
    //上一大页
    $this->prve_lpage=$start_page-1;
   
    //下一大页
    $this->next_lpage=$start_page+$this->show_page;

    //开始循环计算当前大页中的小页号
    for ($i=0;$i<$this->show_page;$i++){

      //如果下一个页号已经超出了总页数,则说明应该停止了
      if ($start_page+$i>$this->page_count)break;

      //将页号记录在$this->page_arr数组中
      $this->page_arr[]=$start_page+$i;

    }

  }

}

?>

操作方法
一、简单操作:
    1、//取得当前页号
       $current_page=(int)$_GET['page'];
    2、//统计帖子数
       $title_count=…………//这里大家可以采用自己的方法来统计
    3、//使用分页类
       $page_obj=new machine_page($title_count,$current_page);

二、完全操作
    1、//取得当前页号
       $current_page=(int)$_GET['page'];
    2、//统计帖子数
       $title_count=…………//这里大家可以采用自己的方法来统计
    3、//使用分页类
       $page_obj=new machine_page($title_count$current_page,10,7);

大家注意到,我只是在加了两个参数10,7这两个表示什么呢?
10表示每页显示10行,7表示显示7个跳转页号。
什么是跳转页号呢?例如,当你在查看1-7页的时候,将显示1 2 3 4 5 6 7
当你在查看第8-14页的时候将显示8 9 10 11 12 13 14

下面说这个类的使用:
这个类将返回这些属性
1:$page_obj->start         查询的起始位置,例:select … limit $page_obj->start,10

2:$page_obj->title_rows    查询返回的行数,例:limit $page_obj->start,$page_obj->title_rows

4:$page_obj->page_arr      代表页面跳转页号的数组,例如1234567(注意,它是一个数组)

5:$page_obj->page_count    代表共有多少页

6:$page_obj->title_count   代表共有多少帖

7:$page_obj->prve_lpage    这个是用来向上翻“大页”的,例如当前如果是第9页,那么上一个大页的
                           的末尾就应该是7,如果当前是第17页,那么上一个大页的末尾就是14

8:$page_obj->next_lpage    这个是用来向下翻“大页”的,例如当前如果是第4页,那么下一个大页的
                           开始页就应该是8,如果当前是第9页,那么下一个大页的开始页就是15



下面给出使用例子


<?
///////准备工作
include_once('lib/machine_page.class.php');
$conn=mysql_connect('localhost','root','123456');
mysql_select_db('web');


///////统计帖子数
$rs=mysql_query('select count(*) as num from tit_title');
$title_count=mysql_fetch_assoc($rs);


/*
  假设你的url为:'http://localhost/yitian/php1.php?x=5&y=abc&z=18&page=3
  其中page表示我们要跳到第3页,$x,$y,$z这三个是用于你程序中的其他的参数
  现在我们来获取url参数
*/
$page=abs((int)$_GET['page']);//其他的参数值是用于举例子,这个参数才是关键。

//之所以放这三个参数,是因为有人问我这个类能不能传递其他参数,所以这里给出例子。
$x=$_GET['x'];
$y=$_GET['y'];
$z=$_GET['z'];


//////现在开始分页,每页显示2帖,显示3 个跳转页
$page_obj=new page($title_count['num'],$page,2,3);


//////现在取出我们要查询的帖子
$sql='select * from tit_title limit '.$page_obj->start.','.$page_obj->title_rows;
$title_query=mysql_query($sql);
while ($title_rs=mysql_fetch_assoc($title_query)) {
        $title[]=$title_rs;
}

//////显示出我们查询的内容
echo '<pre>';
print_r($title);

/////配置跳转页
$url='http://localhost/yitian/php1.php?x='.$x.'&y='.$y.'&z='.$z.'&page=';

echo "<br><a href='".$url.$page_obj->prve_lpage."'><<</a> ";
echo "<a href='".$url.($page_obj->current_page-1)."'>上一页</a> ";
foreach ($page_obj->page_arr as $value){
        if ($page_obj->current_page==$value){
                echo '<b>'.$value.'</b> ';
        }else {
                echo "<a href='".$url.$value."'>".$value."</a> ";
        }
}
echo "<a href='".$url.($page_obj->current_page+1)."'>下一页</a> ";
echo "<a href='".$url.$page_obj->next_lpage."'>>></a>";

/*将输出以下结果
Array
(
    [0] => Array
        (
            [title_id] => 9
            [title_bid] => 7
            [title_user_id] => 1
            [title_username] => machine-马
            [title_leibie] => 0
            [title_title] => ssssssssssssssssssssssaaaaaaaaa
            [title_clicks] => 0
            [title_rbacks] => 0
            [title_haoping] => 0
            [title_wondeful] => 1
            [title_rtime] => 1145736425
        )

    [1] => Array
        (
            [title_id] => 14
            [title_bid] => 8
            [title_user_id] => 1
            [title_username] => msr182
            [title_leibie] => 0
            [title_title] => ddddddddddddddddddddddddd
            [title_clicks] => 0
            [title_rbacks] => 0
            [title_haoping] => 0
            [title_wondeful] => 0
            [title_rtime] => 1145931949
        )

)
<< 上一页 1 2 3 下一页 >>


*/

?>
[ 本帖最后由 machine_马 于 2006-7-18 12:26 编辑 ]

作者: machine_马   发布时间: 2006-05-31

/************************************************************************

   刚写的一个表单验证,看了一些其他的表单验证觉得麻烦,就自己乱写了一个
   我是菜鸟,高手末砸

************************************************************************/
复制内容到剪贴板
代码:
<?php
function machine_check_fill( $check_arr = array() )
{
        $pattern['id_name'] = array('!^[a-z0-9]{3,8}$!i' , '您输入的用户名格式不正确');
       
        $pattern['nick_name'] = array('!^.{4,12}$!' , '您输入的用户昵称格式不正确');
       
        $pattern['email'] = array('!^[a-z0-9]+(\.[a-z0-9]+)?@[a-z0-9]+\.[a-z0-9]+(\.[a-z0-9]+)?$!i' , '您输入的电子邮箱格式不正确');
       
        $pattern['password'] = array('!^[a-z0-9]{6,14}$!i' , '您输入的密码格式不正确');
       
        $pattern['real_name'] = array('!^.{4,20}$!' , '您输入的真实姓名格式不正确');
       
        $pattern['id_card'] = array('!^[0-9]{15}([0-9]{2}[a-z0-9])?$!i' , '您输入的身份证号码格式不正确');
       
        $pattern['title'] = array('!^.{1,255}$!' , '您输入的帖子标题格式不正确');
       
        $pattern['content'] = array('!^.{1,}$!' , '您输入的帖子内容格式不正确');
       
        $err_msg='';

        if ( !is_array($check_arr) )
        {
                return '对不起,表单参数传递错误';
        }

        foreach ($check_arr as $key => $value)
        {
                if ( empty($pattern[$key]) )
                {
                        return '对不起,该表单验证项不存在';
                }
               
                if( !preg_match($pattern[$key][0], $value) )
                {
                        $err_msg.=$pattern[$key][1].'<br>';
                }
        }
       
        return $err_msg;
}


?>
//例子:

$id_name=$_POST['id_name'];
$password=$_POST['password'];
echo machine_check_fill(array('id_name'=>$id_name,'password'=>$password));

作者: machine_马   发布时间: 2006-05-31

/************************************************************************

                           说一下数据的导出和导入

************************************************************************/

数据的导出,一般我使用的方法是:select * from table1 into outfile 'c:/123.txt';
通过这条语句,我们可以把table1中的所有数据导入到C盘下的123.txt文件中。
字段与字段之间默认是用制表符分隔的,即'\t'。而行与行之间默认则使用'\n'分隔的
如果想使用其他的符号来分隔字段,可以这样做:select * from table1 into outfile 'c:/123.txt' fields terminated by ',';
如果想使用其它的符号来分隔行,则可以:select * from table1 into outfile 'c:/123.txt' lines terminated by ',';

但是需要注意的是,123.txt文件必须事先是不存在的,该文件由指令创建。如果123.txt已经存在,则会报错:
“ERROR 1086 (HY000): File 'C:/123.txt' already exists”
类似的,我们可以使用这样的语句来创建一个电子表格select * from table1 into outfile 'c:/123.xls';


数据的导入相对导出来说则要麻烦一点。
load data infile'c:/123.txt' into table table1;
通过这条语句,我们把刚才导出的文件123.txt中的内容又导回table1表,不过这个时候要注意几点:
1:如果你的表中有 primary key 或者 unique 字段,那么导回的数据不能与原有的数据冲突。比方说,你的表中name字段是unique类型的
   那么,如果他已经有了一个值'machine',那么这个时候,你导入的数据在该字段上也有machine的话,
   则会提示错误,但是错误发生之前的数据还是会被插入到数据库。意思就是:部分被插入了。
2:如果你的表中有 auto_increment 字段的话,那么导回之前,该表必须是空的,否则也会报错
3:上面我们说了可以将数据导入到电子表格中,那么是否能从电子表格中把数据到回到数据库呢?
  这里要分情况讨论,如果电子表格中的数据是通过select into outfile导出生成的,则可以再通过load date导回,
  但是如果电子表格中的数据是你自己敲入的,那么则不可以通过load date导回,原因是数据库无法识别电子表格使用的分隔符。
  这个时候我们可以先把电子表格中的数据另存为.txt格式,保存时选择“制表符分隔”,这样我们就可以导入那些用电子表格保存的数据了

作者: machine_马   发布时间: 2006-05-31

复制内容到剪贴板
代码:
/************************************************************************

            刚才说了导出导入,现在再来说一下 主键、索引 、唯一

************************************************************************/
主键:又称为主键索引,即主键本身就是一个索引,它最能代表该表中每条数据的唯一性,可以称为每条数据的唯一标识。表1的主键在表2中可以作为外键来关联表1。
  比方说这个例子:
  班级表(记为表1)有class_id这个字段,他代表班级号,是表1的主键。学生表(记为表2)有stu_id class_id这两个字段,其中stu_id是表2的主键,他代表每个学生的学号,而class_id就是外键,代表了这个学生在哪个班,它用来关联表1。
  在查询速度上,利用主键索引查询要比普通索引查询速度快。主键索引必定是唯一的,并且值得注意的是,可以将几个字段设为一个主键索引,例如你可以把用户表中的id 和 name这两个字段设置为主键索引。那么,只有当id 和 name字段上同时出现重复时,才会出错。
  例如:id  name   或者  id  name
        0   msr          0   msr
        1   msr          0   msr182
  这样的数据是可以的,但是下面的这个就不可以
       id  name
       0   msr  
       0   msr  

索引:即普通索引,当某个字段使用率非常高时。例如,我们select * from table where name='machine' 当name字段使用非常频繁时,就应该给该字段加一个普通索引,建立索引能提高查询的速度

唯一:又称为唯一索引,首先,它是一个普通索引,不同在于它不能有重复值,如果试图插入重复值,则会提示错误

总的来说,建立索引是为了提高查询速度,但是建立索引会牺牲掉一部分数据库空间。并且,建立索引会降低插入数据、更新数据的速度
[ 本帖最后由 machine_马 于 2006-9-21 12:57 编辑 ]

作者: machine_马   发布时间: 2006-05-31

复制内容到剪贴板
代码:
/************************************************************************

    一个清理代码的程序,它可以清理一个目录下的所有的asp或者php的程序
    这个程序有什么用呢?比方说当我们手上有一套asp写的系统,你们发现它
    的美工作得很好,想拿来用php重写。于是,你们需要删除掉每个文件中的
    asp代码部分,一行一行的查找,然后把它们删除,这样工作量是不是很大
    呢?并且很容易删错删漏。于是我就做了这个程序,它可以自动地帮你完成
    上述功能。这个程序是很久以前写的了,还不是很完善,以后有时间再把它
    完善一下。
    使用的时候,把一下代码直接复制为一个php文件就行了。

************************************************************************/

<?php
class clear{
        var $old_dir;//被替换文件存放路径
        var $save_dir;//替换后文件保存路径
        var $save_dir2;//替换后文件保存路径
        var $file_name;
        var $file_count=array();//纪录替换成功了多少个文件
        var $fail_count=array();//纪录替换失败了多少个文件
        var $language;//设定要替换的语种
        function clear($old_dir='',$save_dir='newdir',$language='asp'){
                //判别文件或者目录是否存在
                if(!file_exists($old_dir))die('对不起,您输入的文件或者目录不存在,请检查输入');
                $save_dir=str_replace('\\','/',$save_dir);
                $save_dir=str_replace('//','/',$save_dir);
                if(substr($save_dir,-1,1)!='/')$save_dir.='/';
                $old_dir=str_replace('\\','/',$old_dir);
                $old_dir=str_replace('//','/',$old_dir);
                $this->language=$language;
                $this->save_dir=$save_dir;
                $this->file_count=array();
                //如果传入的是一个文件则:
                if(preg_match('{\.(asp|php|html|htm)$}i',$old_dir)){
                        $this->old_dir=$old_dir;
                        $this->file_name=basename($this->old_dir);//获取文件名
                        $this->clear_do();
                        //如果传入的是一个文件夹则:
                }elseif(!preg_match('{\..*$}i',$old_dir)){
                        if(substr($old_dir,-1,1)!='/')$old_dir.='/';
                        $this->xunhuan($old_dir,$save_dir);
                }else{
                        echo '您的文件或者目录地址输入有误,请检查输入';
                }
        }
        function xunhuan($old_dir,$save_dir){
                @$dir=opendir($old_dir);
                if(!$dir){
                        return;
                }
                while(false!==($f=readdir($dir))){
                        //如果当前是文件则直接替换
                        if(preg_match('{\.(asp|php|html|htm)$}i',$f)){
                                $this->old_dir=$old_dir.$f;
                                $this->save_dir=$save_dir;
                                $this->file_name=basename($this->old_dir);//获取文件名
                                $this->clear_do();
                                //如果当前是目录则继续打开
                        }elseif(!preg_match('{\..*$}i',$old_dir.$f)){
                                $this->xunhuan($old_dir.$f.'/',$save_dir.$f.'/');
                        }
                }
        }
        function clear_do(){
                $content=$this->read_file();//获取文件内容
                $new_content=$this->tihuan($content);//实现替换
                $this->put_in($new_content);//保存到新目录
        }
        function read_file(){
                $fp=fopen($this->old_dir,'rb') or die('文件打开失败');
                @$content=fread($fp,filesize($this->old_dir));
                if(!$content)$this->fail_count[]=$this->old_dir;
                fclose($fp);
                return $content;
        }
        function tihuan($content){
                switch($this->language){
                        case 'asp'fuhao='%';break;
                        case 'php'fuhao='\?';break;
                        case 'script'fuhao='script';break;
                        default:die('你选择的程序语言不在本替换系统执行范围内');
                }
                return preg_replace('{<'.$fuhao.'.*'.$fuhao.'>}Us','',$content);
        }
        function put_in($new_content){
                if(!file_exists($this->save_dir))@mkdir($this->save_dir);
                if(!file_exists($this->save_dir))die('对不起,您输入的文件保存路径'.$this->save_dir.'有误,请检查输入');
                $fp=fopen($this->save_dir.$this->file_name,'wb');
                $finish=fwrite($fp,$new_content);
                fclose($fp);
                if($finish!==false){
                        $this->file_count[]='文件'.$this->file_name.'里的'.$this->language.'代码已经清理成功,并且已保存到<a href="'.$this->save_dir.'" target="blank">'.$this->save_dir.'</a>目录<br>';
                        return TRUE;
                }else{return FALSE;}
        }
}
$old_dir=$_POST['old_dir'];
$save_dir=$_POST['save_dir'];
$language=$_POST['language'];
if(!empty($old_dir)&&!empty($save_dir)&&!empty($language)){
        $clear=new clear($old_dir,$save_dir,$language);
        $ok=1;
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
<style type="text/css">
<!--
.STYLE1 {font-size: 14px}
.STYLE3 {font-size: 13px}
-->
</style>
</head>
<body leftmargin="0" topmargin="0">
  <script language="javascript">
  function re(){
          if(document.tihuan.upfile.value==''||document.tihuan.save_dir.value==''){
                  alert('对不起,请将数据填写完整')
                  return false;
          }
          document.tihuan.old_dir.value=document.tihuan.upfile.value
  }
  </script>
  <br>
<table width="500" border="1" align="center" cellpadding="0" cellspacing="0">
<form name="tihuan" action="index.php" method="post" onSubmit="return re()">
<input type="hidden" name="old_dir" value="">
  <tr>
    <td height="40" colspan="2" align="center"><span class="STYLE1">存放目录请使用绝对路径,例如:C:/Apache2/htdocs/test/newdir/<br>
    您可以选择替换单个文件,也可以选择替换整个目录<br>
    如果您需要替换整个目录,只要把目录的路径完整输入就可以了<br>
    为了安全起见,请不要选择存放目录为您的原始目录<br>
    程序如果遇到同名的文件,会将它覆盖掉</span></td>
  </tr>
  <tr>
    <td width="149" height="20"><span class="STYLE3">需要清理代码的页面路径</span></td>
    <td width="345"><input name="upfile" type="file" size="30" /></td>
    </tr>
  <tr>
    <td height="20"><span class="STYLE3">清理之后页面的存放路径</span></td>
    <td><input name="save_dir" type="text" size="40" /></td>
    </tr>
  <tr>
    <td height="20"><span class="STYLE3">请选择您需要替换的语言</span></td>
    <td align="center"><span class="STYLE3"><input name="language" type="radio" value="asp" checked />
      ASP
      
        <input type="radio" name="language" value="php" />
        PHP
      
        <input type="radio" name="language" value="script" />
      SCRIPT      </span></td>
    </tr>
  <tr>
    <td height="20" colspan="2" align="center"><input type="submit" name="Submit" value="提交" /></td>
    </tr>        
</form>
</table>
<?
if($ok==1){
        echo '<table width="500" border="1" align="center" cellpadding="0" cellspacing="0">
               <tr><td height="300" align="center" valign="top">
                   <p class="STYLE1">清理完成</p><span class="STYLE3">';
        foreach($clear->file_count as $value)echo '<p>'.$value.'</p>';
        echo '</span></td></tr>';
        if(!empty($clear->fail_count)){
                echo '<tr><td valign="top" align="center"><p class="STYLE1">清理失败</p><span class="STYLE3">';
                foreach($clear->fail_count as $value2)echo $value2.'<br></span></td></tr>';
        }
        echo '</table>';
}
?>
</body>
</html>
[ 本帖最后由 machine_马 于 2006-9-21 12:57 编辑 ]

作者: machine_马   发布时间: 2006-05-31

/************************************************************************

     这段时间学校搞文化艺术节,累死。有段时间没上来写东西了,今天赶紧补
     一个我半年之前写的模版类,现在看来是无比的幼稚,现在都使用smarty了,
     不过可以从这个类来分析一下模版的一些原理,讲得不好,高手末砸
   
************************************************************************/
复制内容到剪贴板
代码:
<?
class moban{
        var $url;//设置模版路径

        function moban($url=''){//构造函数
                if(empty($url))$this->wrong('系统错误:模板文件路径不能为空','die');
                if(!file_exists($url))$this->wrong('系统错误:找不到模板文件');
                $this->url=$url;//设置模板存放路经
        }

        function duqu(){//读取模板文件函数
                @$tpl=file_get_contents($this->url);//读取模板内容,如果模板为空,将发生错误
                if(!$tpl)$this->wrong('系统错误:模板文件为空','die');
                return $tpl;//返回模板内容
        }

        function tihuan($yuansu=array(),$tpl=''){//替换普通元素函数
                if(empty($tpl))$tpl=$this->duqu();//如果传入模板内容为空,则读取原始模板
                if(empty($yuansu))$this->wrong('系统错误:替换元素为空','die');
                //对元素进行替换 key为模板变量value为模板值
                foreach($yuansu as $key=>$value){//根据传入数组,替换模板中的变量
                        $tpl=str_replace('{'.$key.'}',$value,$tpl);
                }
                return $tpl;//返回替换后模板
        }

        function xunhuan($yuansu=array(),$tpl=''){//替换循环元素
                if(empty($tpl))$tpl=$this->duqu();//如果传入模板内容为空,则读取
                if(!is_array($yuansu)||empty($yuansu))$this->wrong('系统错误:循环替换元素为空','die');
                //$xht_l为循环体的开始标签,$xht_r为循环体的结束标签,$pattern为正则匹配模式
                $xht_l=str_replace('}','(\|.+)*}',key($yuansu));
                $xht_r=str_replace('{','{/',key($yuansu));
                $pattern='!'.$xht_l.'.+'.$xht_r.'!USsi';
                $block_arr=array();
                preg_match($pattern,$tpl,$block_arr);//用正则表达式查询循环模块,并将其输出到$block_arr数组
                $block=$block_arr[0];//获取模块的内容
                //对元素进行替换,key为模板变量,value为模板值
                foreach(current($yuansu) as $key=>$vlaue){
                        $block=str_replace('{'.$key.'}',$vlaue,$block);
                }
                $block=preg_replace('!'.$xht_l.'!UsS','',$block);
                $block=str_replace($xht_r,'',$block);
                return $block;//返回替换后模块
        }

        //替换模块元素,$xht_l为循环体的开始标签,$value为用来替换的值,$block为被替换的模块
        function block_th($xht_l='',$value='',$block=''){
                if(empty($xht_l))$this->wrong('系统错误:板块替换传入错误','die');
                if(empty($block))$block=$this->duqu();
                //$pattern为正则匹配模式
                $xht_r=str_replace('{','{/',$xht_l);//$xht_r为循环体的结束标签
                $xht_l=str_replace('}','(|.+)*}',$xht_l);
                $pattern='!'.$xht_l.'.+'.$xht_r.'!Usi';//配置匹配模式
                $block=preg_replace($pattern,$value,$block);//进行替换
                //删除掉循环标签
                $block=str_replace($xht_l,'',$block);
                $block=str_replace($xht_r,'',$block);
                $block=str_replace('<!---->','',$block);
                return $block;//返回被替换后的模块
        }
}
?>
现在开始来解读这个类。
复制内容到剪贴板
代码:
        首先我们先假设一个temp/test.html的模版文件,它的内容为:
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
        <title>无标题文档</title>
        </head>
        <body>
        {name}的年龄是:{age},性别是:{sex}
        <br />
        以下是他的从小学到大学所在学校的情况
        <{xunhuan}>
        <li>{part}:{school}</li>
        <{/xunhuan}>
        </body>
        </html>
1、先看
复制内容到剪贴板
代码:
        function moban($url=''){//构造函数
                if(empty($url))$this->wrong('系统错误:模板文件路径不能为空','die');
                if(!file_exists($url))$this->wrong('系统错误:找不到模板文件');
                $this->url=$url;//设置模板存放路经
        }

        该函数为本类的构造函数,在实例化的同时,设置模版的存放路径$url,后面的程序要通过这个值来找到模版存放的地方,然后才能进行替换

        例:这个例子只是简单的实例化了moban类,并且设置将要被替换的模版文件的路径为temp目录中的test.html文件
                <?
                $moban = new moban('temp/test.html')
                ?>
2、再看
复制内容到剪贴板
代码:
        function duqu(){//读取模板文件函数
                @$tpl=file_get_contents($this->url);//读取模板内容,如果模板为空,将发生错误
                if(!$tpl)$this->wrong('系统错误:模板文件为空','die');
                return $tpl;//返回模板内容
        }

        该函数用来读取模版文件的内容,它将整个模版文件读出,并保存到$tpl变量中

        例:实例化moban类,并且设置将要被替换的模版文件的路径为temp目录中的test.html文件,然后将模版文件的内容显示出来

                <?
                $moban = new moban('test.html');
                echo $moban->duqu();
                ?>

        它将把模版的内容原封不动地显示出来:
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
        <title>无标题文档</title>
        </head>
        <body>
        {name}的年龄是:{age},性别是:{sex}
        <br />
        以下是他的从小学到大学所在学校的情况
        <{xunhuan}>
        <li>{part}:{school}</li>
        <{/xunhuan}>
        </body>
        </html>
3、然后是
复制内容到剪贴板
代码:
        function tihuan($yuansu=array(),$tpl=''){//替换普通模版变量的函数
                if(empty($tpl))$tpl=$this->duqu();//如果传入模板内容为空,则读取原始模板
                if(empty($yuansu))$this->wrong('系统错误:替换元素为空','die');
                //对元素进行替换 key为模板变量value为模板值
                foreach($yuansu as $key=>$value){//根据传入数组,替换模板中的变量
                        $tpl=str_replace('{'.$key.'}',$value,$tpl);
                }
                return $tpl;//返回替换后模板
        }

        该函数用来替换普通的模版变量,先看参数$tpl是否为空,如果为空则通过duqu()函数读入模版的内容并且放到$tpl变量中。然后查看传入的$yuansu变量,如果为空则提示错误。接下来是主要的替换部分,通过上面的例子我们可以知道,$yuansu实际上是一个类似这样的数组       

            $yuansu=array('name'=>'machine_马','age'=>'23','sex'=>'男')       

    {name}、{age}、{sex}这三个就是模版变量。而machine_马、23、男这三个就是我们实际想显示的值,通过循环调用str_replace函数,我们逐个的将模版$tpl中的模版变量替换为我们想要的值,然后返回替换后的$tpl(即替换后的模版)


        例:
                <?
                $moban =new moban('test.html');
                $yuansu=array('name'=>'machine_马','age'=>'23','sex'=>'男');
                $tpl=$moban->tihuan($yuansu);
                echo $tpl;
                ?>
        它将显示:
        <html>
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
        <title>无标题文档</title>
        </head>
        <body>
        machine_马的年龄是:23,性别是:男                       <!-----------注意这里---->
        <br />
        以下是他的从小学到大学所在学校的情况
        <{xunhuan}>
        <li>{part}:{school}</li>
        <{/xunhuan}>
        </body>
        </html>
4、接下来是
复制内容到剪贴板
代码:
       
        function xunhuan($yuansu=array(),$tpl=''){//替换循环元素
                if(empty($tpl))$tpl=$this->duqu();//如果传入模板内容为空,则读取
                if(!is_array($yuansu)||empty($yuansu))$this->wrong('系统错误:循环替换元素为空','die');
                //$xht_l为循环体的开始标签,$xht_r为循环体的结束标签,$pattern为正则匹配模式
                $xht_l=str_replace('}','(\|.+)*}',key($yuansu));
                $xht_r=str_replace('{','{/',key($yuansu));
                $pattern='!'.$xht_l.'.+'.$xht_r.'!USsi';
                $block_arr=array();
                preg_match($pattern,$tpl,$block_arr);//用正则表达式查询循环模块,并将其输出到$block_arr数组
                $block=$block_arr[0];//获取模块的内容
                //对元素进行替换,key为模板变量,value为模板值
                foreach(current($yuansu) as $key=>$vlaue){
                        $block=str_replace('{'.$key.'}',$vlaue,$block);
                }
                $block=preg_replace('!'.$xht_l.'!UsS','',$block);
                $block=str_replace($xht_r,'',$block);
                return $block;//返回替换后模块
        }
未完待续(先去吃饭了)

[ 本帖最后由 machine_马 于 2006-8-8 23:19 编辑 ]

作者: machine_马   发布时间: 2006-06-06

还行吧

作者: fnet   发布时间: 2006-06-06

楼主,能不能做个索引,给大家。:)

作者: PHPChina   发布时间: 2006-06-07

对了 下个月就要期考了
看来要有段时间不能来这里了
唉~~~~~~~~~~~~~~考试真痛苦

作者: machine_马   发布时间: 2006-06-07

:)  一样,我也要考,哈

作者: Phzzy   发布时间: 2006-06-08

我也要考试了23号放假.

作者: szy_session1987   发布时间: 2006-06-08

以前做的一个测试 在相同条件下为了把数据库中的
“能推荐些好的php5+apache+mysql的学习教程吗?顺便给说说php的学习路线和学习方法,好让初学者少走弯路”
这段话中的"php5"提换成"asp"的执行效率

测试过程是 数据库中有467,834条相同数据
把他们全部取出来 然后replace掉一部分信息
计算所花的时间。每种情况都执行了10次 去掉一个最大的 去掉一个最小的 然后取平均值
(我的机子是 p4 2.8G,512DDR)

结果是:
用mysql的replace花的时间为12.7909291089
用php的str_replace花的时间为14.1444325149
用php的preg_replace花的时间为16.3556557894
用php的ereg_replace花的时间为18.5530973673

希望能帮到大家

[ 本帖最后由 machine_马 于 2006-6-12 11:43 编辑 ]

作者: machine_马   发布时间: 2006-06-12

/************************************************************************
      好久没来了,这次带来个大的咚咚
      -----数据库的构架
      相信很多人都需要吧
      这个构架也是没有做完的,提前放上来给大家参考
      还有,构架中很多东西都是我自己想的
      所以肯定有很多不够优化的地方,希望大家多多指出
************************************************************************/

###############################
###        板  块  表       ###
###############################

板块分类表 bolck_part
|--part_id        板块的id
|--part_layer     板块的层次结构(采用000000三层模式,例如020509代表第2板块下的第5个分板块中的第9个子板块)
|--part_name      板块的名称
|--part_jj        板块的简介
|--part_notice    板块的公告
|--part_titles    板块的帖子数
|--part_wonds     板块的精华帖数
|--part_show      是否显示(Y:一直显示,N:是管理员才显示)
================================
板块权限表 bolck_limit
|--limit_part_id  对应的板块id
|--limit_fatie    发帖权限(b:注册之后才可以发,c:是管理员<指所有的>才可以发,d:对本版有管理权限的管理员才可以发)
|--limit_image    发图权限(b:注册之后才可以发,c:是管理员<指所有的>才可以发,d:对本版有管理权限的管理员才可以发)
|--limit_visit    访问权限(a:任何人都可以访问,b:注册后才可以访问,c:是管理员<指所有的>才可以访问,d:对本版有管理权限的管理员才可以访问)
|--limit_rar      发rar/zip附件权限(b:注册之后才可以发,c:是管理员<指所有的>才可以发,d:对本版有管理权限的管理员才可以发)
|--limit_office   发doc、xls、pdf等附件权限(b:注册之后才可以发,c:是管理员<指所有的>才可以发,d:对本版有管理权限的管理员才可以发)


###############################
###          用  户         ###
###############################

用户信息表user_inf
|--inf_id          用户id
|--inf_idname      用户名
|--inf_username    昵称
|--inf_password    用户密码
|--inf_sex         性别B男,G女
|--inf_touxiang    头像
|--inf_email       email
|--inf_oicq        oicq
|--inf_qianming    签名
|--inf_dele_nums   被删帖次数
|--inf_ptitles     发帖次数
|--inf_rtitles     回帖次数
|--inf_won_counts  精华帖数
|--inf_shengwang   声望值
|--inf_haoping     好评数
|--inf_banzhu      该用户是否为版主 N不是,Y是
|--inf_reg_check   是否通过审核
|--inf_pingfen     当天还可以评的分数
|--inf_ping_time    最后一次评分的时间
|--inf_reg_time     注册时间
|--inf_free_time   该用户的释放时间(如果为0则说明该用户没被监禁)
|--inf_msg         是否有新短消息(0表示没有,0以上的数字表示当前有几封新短消息)
|--inf_log_time    最后登陆时间
|--inf_log_counts  登陆次数
================================
用户感兴趣的板块表 user_block
|--block_inf_id    关联用户id
|--block_part_id   关联感兴趣板块的id
|--block_index     感兴趣板块的显示顺序
================================
版主信息表 user_banzhu
|--banzhu_inf_id   关联用户id
|--banzhu_part_id  关联板块id


###############################
###          帖  子         ###
###############################

主帖表 tit_article
|--article_id          主帖id----主键
|--article_part_id     帖子所属版块id
|--article_inf_id      主帖作者id
|--article_leibie      主帖类别
|--article_title       主帖标题
|--article_content     主帖内容
|--article_xinqing     心情
|--article_pic         表情
|--article_upfile      是否有附件,N否Y是
|--article_clicks      点击数
|--article_rbacks      回复数
|--article_haoping     好评数
|--article_agree       是否通过审查,N否Y是
|--article_top          是否为置顶,N否Y是
|--article_wondeful    是否为精华帖,N否Y是
|--article_delete      是否被逻辑删除,N否Y是
|--article_print_time  发表时间
|--article_update_time 最后更新时间(用于帖子排序)
|--article_click_time  最后访问时间(用于批量删除帖子)
|--article_ip          发帖时用户ip
================================
回帖表 tit_rback   
|--rback_id          回帖id
|--rback_art_id      被回复帖id
|--rback_agree       是否通过审查,N否Y是
|--rback_del         是否删除,N否Y是
|--rback_inf_id      回帖作者id
|--rback_content     回复内容
|--rback_to          对某人说
|--rback_xinqing     心情
|--rback_pic         表情
|--rback_upfile      是否有附件,0否1是
|--rback_time        回复时间
|--rback_ip          回帖时所在ip
================================
附件管理表 tit_upfile
|--upfile_id                 附件的id
|--upfile_part_id         附件所在板块的id
|--upfile_name         附件的文件名
|--upfile_type         附件的类型
|--upfile_msg                 附件的说明
|--upfile_art_id         关联主帖的id
|--upfile_rback_id         关联回帖的id
|--upfile_time         附件上传的时间
================================


###############################
###          短消息         ###
###############################

短消息表 small_msg
|--msg_id         短消息的id
|--msg_inf_id     短消息作者id
|--msg_to_inf_id  目标用户id
|--msg_title      短消息标题
|--msg_content    短消息内容
|--msg_card_id    贺卡(关联贺卡库里的文件名就可以了)
|--msg_readed     是否被读,N否Y是
|--msg_post_del   发信人删除信息 N否Y是
|--msg_get_del    收信人删除信息(当两个字段都为Y是才删除本条信息)
|--msg_time       短消息发送时间
================================
贺卡库  card
|--card_id            贺卡id号
|--card_name          贺卡文件名


###############################
###          称  谓         ###
###############################

级别表 honor_great
|--great_id         级别id
|--great_name       级别称谓
|--great_min        该级别下限
|--great_max        该级别上限
================================
人品表 honor_renpin
|--renpin_id         人品id
|--renpin_name       人品称谓
|--renpin_min        该级别下限
|--renpin_max        该级别上限
================================
财富表 honor_caifu
|--caifu_id         财富id
|--caifu_name       财富称谓
|--caifu_min        该级别下限
|--caifu_max        该级别上限


###############################
###         系统配置        ###
###############################

系统基本设置表 system_config
|--config_name        配置名
|--config_value       配置值

web_name                网站名称
web_address                网站地址
web_phone                网站联系电话
web_email                网站联系email
web_cpright                网站版权
web_close                关闭网站
web_close_reason        关闭网站
web_reg_allow                是否关闭新用户注册
web_reg_check                注册验证 0:不需验证,1:管理员验证 2:email验证
web_new_user_time        新手见习时间
web_welcome                欢迎短消息内容
web_titles                每页显示主题数
web_title_allow        是否需要验证新发的帖子
web_rbacks                每页显示回帖数
web_pingfen                每天可以使用的分数


-------------------------------
未完

作者: machine_马   发布时间: 2006-08-01

/************************************************************************
     既然来了,就大放送一组
     上传用的函数
************************************************************************/
复制内容到剪贴板
代码:
<?php
function machine_up_file($files='',$max_size=2097152){
        $i=0;
        $rand_arr=range('a','z');
        if (!is_array($files)){
                href();
        }
        foreach ($files as $key=>$arr){
                if($arr['error']==0){
                        if (!is_uploaded_file($arr['tmp_name'])) {
                                $err_msg.='文件<b>'.$arr['name'].'</b>不可上传<br>';
                                continue;
                        } elseif ($_FILES['up_file']['size']>$max_size) {
                                $err_msg.='文件<b>'.$arr['name'].'上传失败</b>,原因是:文件超过限定大小<br>';
                                continue;
                        } elseif (!preg_match('!\.(gif)|(jpg)|(jpeg)|(bmp)|(doc)|(xls)|(wps)|(txt)|(rtf)|(rar)|(zip)!i',$arr['name'])) {
                                $err_msg.='文件<b>'.$arr['name'].'上传失败</b>,原因是:格式不正确<br>';
                                continue;
                        }else{
                                $hz=strtolower(strstr($arr['name'],'.'));
                                if(!$hz){
                                        $err_msg.='文件<b>'.$arr['name'].'</b>上传失败,原因是:格式不正确<br>';
                                        continue;
                                }
                                shuffle($rand_arr);
                                $rand_str=join($rand_arr);
                                $new_url=date('ymdHis').substr($rand_str,-5).$hz;
                                switch (substr($key,0,6)){
                                        case 'up_ima':
                                                $type='A';
                                                @$ok=move_uploaded_file($arr['tmp_name'],THIS_DIR.'file/up_image/'.$new_url);
                                                break;
                                        case 'up_off':
                                                $type='B';
                                                @$ok=move_uploaded_file($arr['tmp_name'],THIS_DIR.'file/up_office/'.$new_url);
                                                break;
                                        case 'up_rar':
                                                $type='C';
                                                @$ok=move_uploaded_file($arr['tmp_name'],THIS_DIR.'file/up_rar/'.$new_url);
                                                break;
                                }
                                if ($ok){
                                        $name_arr=explode('.',$arr['name']);
                                        $ok_url[$i]['name']=$new_url;
                                        $ok_url[$i]['msg']=$name_arr[0];
                                        $ok_url[$i]['type']=$type;
                                        $ok_url[$i]['hz']=$hz;
                                        $i++;
                                }else {
                                        $err_msg.='文件<b>'.$arr['name'].'</b>上传出错<br>';
                                        continue;
                                }
                        }
                }else{
                        $err_msg.='文件<b>'.$arr['name'].'</b>上传出错<br>';
                        continue;
                }
        }
        $rs=array('ok_arr'=>$ok_url,'err_msg'=>$err_msg,'num'=>$i);
        return $rs;
}
?>
[ 本帖最后由 machine_马 于 2006-8-1 17:04 编辑 ]

作者: machine_马   发布时间: 2006-08-01

复制PHP内容到剪贴板
PHP代码:

<?php
/************************************************************************
     再送一个ubb函数
     在这里看这可能很乱
     因为我都使用tab键分隔的
     如果修改的话太花时间
     谁如果需要的话,就把他复制到自己电脑里面看吧
     以后有空的时候再来整理一下
************************************************************************/
function machine_out_put($text=''){
        global $smarty;
        if(!is_object($smarty)){
                href();
        }

        $partern_arr=array(
        '!\[B\]!'=>'<B>',  '!\[/B\]!'  =>  '</B>',
        '!\[I\]!'  =>  '<I>',  '!\[/I\]!'  =>  '</I>',
        '!\[U\]!'  =>  '<U>',  '!\[/U\]!'  =>  '</U>',
        '!\[S1\]!'  =>  '<font size=1>',  '!\[/S1\]!'  =>  '</font>',
        '!\[S2\]!'  =>  '<font size=2>',  '!\[/S2\]!'  =>  '</font>',
        '!\[S3\]!'  =>  '<font size=3>',  '!\[/S3\]!'  =>  '</font>',
        '!\[S4\]!'  =>  '<font size=4>',  '!\[/S4\]!'  =>  '</font>',
        '!\[S5\]!'  =>  '<font size=5>',  '!\[/S5\]!'  =>  '</font>',
        '!\[S6\]!'  =>  '<font size=6>',  '!\[/S6\]!'  =>  '</font>',
        '!\[S7\]!'  =>  '<font size=7>',  '!\[/S7\]!'  =>  '</font>',
        '!\[BL\]!'  =>  '<font color="black">',  '!\[/BL\]!'  =>  '</font>',
        '!\[DR\]!'  =>  '<font color="darkred">',  '!\[/DR\]!'  =>  '</font>',
        '!\[LB\]!'  =>  '<font color="lightblue">',  '!\[/LB\]!'  =>  '</font>',
        '!\[DB\]!'  =>  '<font color="darkblue">',  '!\[/DB\]!'  =>  '</font>',
        '!\[LG\]!'  =>  '<font color="lightgreen">',  '!\[/LG\]!'  =>  '</font>',
        '!\[GR\]!'  =>  '<font color="green">',  '!\[/GR\]!'  =>  '</font>',
        '!\[DG\]!'  =>  '<font color="darkgreen"',  '!\[/DG\]!'  =>  '</font>',
        '!\[PI\]!'  =>  '<font color="pink"',  '!\[/PI\]!'  =>  '</font>',
        '!\[PU\]!'  =>  '<font color="purple"',  '!\[/PU\]!'  =>  '</font>',
        '!\[TE\]!'  =>  '<font color="teal"',  '!\[/TE\]!'  =>  '</font>',
        '!\[LEFT\]!'  =>  '<div align="left">',  '!\[/LEFT\]!'  =>  '</div>',
        '!\[RIGHT\]!'  =>  '<div align="right">',  '!\[/RIGHT\]!'  =>  '</div>',
        '!\[CENTER\]!'  =>  '<div align="center">',  '!\[/CENTER\]!'  =>  '</div>',
        '!\[URL\]http://.*\[/URL\]!i'  =>  '<a href="$0">$0</a>',
        '!\[URL\]!'  =>  '',  '!\[/URL\]!'  =>  '',

        '!\[FC1\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face1.gif" border=0>',
        '!\[FC2\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face2.gif" border=0>',
        '!\[FC3\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face3.gif" border=0>',
        '!\[FC4\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face4.gif" border=0>',
        '!\[FC5\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face5.gif" border=0>',
        '!\[FC6\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face6.gif" border=0>',
        '!\[FC7\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face7.gif" border=0>',
        '!\[FC8\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face8.gif" border=0>',
        '!\[FC9\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face9.gif" border=0>',
        '!\[FC10\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face10.gif" border=0>',
        '!\[FC11\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face11.gif" border=0>',
        '!\[FC12\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face12.gif" border=0>',
        '!\[FC13\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face13.gif" border=0>',
        '!\[FC14\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face14.gif" border=0>',
        '!\[FC15\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face15.gif" border=0>',
        '!\[FC16\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face16.gif" border=0>',
        '!\[FC17\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face17.gif" border=0>',
        '!\[FC18\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face18.gif" border=0>',
        '!\[FC19\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face19.gif" border=0>',
        '!\[FC20\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face20.gif" border=0>',
        '!\[FC21\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face21.gif" border=0>',
        '!\[FC22\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face22.gif" border=0>',
        '!\[FC23\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face23.gif" border=0>',
        '!\[FC24\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face24.gif" border=0>',
        '!\[FC25\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face25.gif" border=0>',
        '!\[FC26\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face26.gif" border=0>',
        '!\[FC27\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face27.gif" border=0>',
        '!\[FC28\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face28.gif" border=0>',
        '!\[FC30\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face30.gif" border=0>',
        '!\[FC31\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face31.gif" border=0>',
        '!\[FC32\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face32.gif" border=0>',
        '!\[FC33\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face33.gif" border=0>',
        '!\[FC34\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face34.gif" border=0>',
        '!\[FC35\]!'  =>  '<img width=20 height=20 src="'.THIS_DIR.'file/qqc/face35.gif" border=0>',
        );

        $text=str_replace('  ','  ',nl2br(htmlspecialchars($text)));
        $text=str_replace(chr(9),'  ',$text);
        $text=preg_replace(array_keys($partern_arr),array_values($partern_arr),$text);

        return $text;
}
?>

[ 本帖最后由 machine_马 于 2007-8-22 21:51 编辑 ]

作者: machine_马   发布时间: 2006-08-01

来好好学习一下

作者: kenus   发布时间: 2006-08-05

学习高手

作者: gaotian   发布时间: 2006-09-19

今天才发现!!

顶了!!!

敬礼!!!!

作者: lmhllr   发布时间: 2006-09-19

热门下载

更多