Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

用PHP和MySQL构建一个数据库驱动的网站(七)

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]


//删除回车符
$joketext = ereg_replace(" ","",$joketext);
//处理分段
$joketext = ereg_replace(" ","<P>",$joketext);
//处理换行
$joketext = ereg_replace(" ","<BR>",$joketext);

  这就是我们想要的!现在文本可以象用户所预期的那样分段了,而他们甚至不需要学习任何特殊的标志。

超链接

  虽然在笑话的内容中支持超链接似乎很可笑,但在其它应用程序中经常会有这种应用。超链接要比简单地将一些代码转换成HTML标志稍微复杂一些。因为我们同时要输出URL和链接显示的内容。

  这里,我们需要用到ereg_replace和eregi_replace的另一个特征了。通过圆括号将正则表达式分成几部分,你可以“获得”匹配的文本中相应的部分并在替代的字符串中用代码 表示,这里n中的1表示正则表达式第一个圆括号中的部分,2表示第二个,一直到9表示第9个。请先参考下面的代码:


$text = "banana";
$text = eregi_replace("(.*)(nana)", "21", $text);
echo($text); // outputs "nanaba"

  在上面的代码中,替代字符串中的1由ba取代,这对应于正则表达式中的(.*) (零个或更多个非换行符)。2由nana取代,这对应于正则表达式中的(nana)。

  在建立我们的超链接时可以使用同样的规则。让我们先从一个简单的连接开始,这里链接的文本同时也是URL。我们需要支持下面的语句:

Visit [L]http://www.php.net/[EL].

  我们想要输出的相应的HTML代码是这样的:

Visit <A HREF="http://www.php.net/">http://www.php.net/</A>.

  首先,我们需要一个正则表达式以匹配这种格式的链接。这个正则表达式将是这样的:

[L][-_./a-zA-Z0-9!&%#?,'=:~]+[EL]

  我们又在[L]和[EL]的前面用了反斜杠,这标志着它们将按字面意思解释。我们使用了方括号列出了我们认为可以作为URL的一部分的所有字符。在这个方括号后面我们使用了一个+表示URL可以由其中的一个或多个字符组成。

  要输出我们的链接,我们需要取出URL同时作为A标签的HREF属性以及链接的文字来输出。要取出URL,我们需要在我们的正则表达式的相应的部分上加上圆括号:

[L]([-_./a-zA-Z0-9!&%#?,'=:~]+)[EL]

  于是我们用下面的代码对链接进行转换:


$joketext = ereg_replace(
  "[L]([-_./a-zA-Z0-9!&%#?,'=:~]+)[EL]",
  "<A HREF="1">1</A>", $joketext);

  请注意我们在链接的HTML代码中的双引号前面使用了反斜杠以防止PHP将其误以为是替代字符串的起止引号。总之,1被这个链接的URL所取代,而输出正是我们所期望的!

  我们还希望支持这样的超链接,那就是链接的文字和他们的URL不一样。这样的链接的格式如下所示:

Check out [L=http://www.php.net/]PHP[EL].

  这是我们的正则表达式:

[L=([-_./a-zA-Z0-9!&%#?,'=:~]+)]([-_./a-zA-Z0-9 !&%#?,'=:~]+)[EL]

  相当混乱,是吗?先不要去管它,你会明白这正是你所需要的,你会同时取出这个链接的URL(1)和文字(2)。执行这个转换的PHP代码将是这样的:


$joketext = ereg_replace(
  "[L=([-_./a-zA-Z0-9!&%#?,'=:~]+)]".
  "([-_./a-zA-Z0-9 !&%#?,'=:~]+)[EL]",
  "<A HREF="1">2</A>", $joketext);

内容的分页

  虽然也许没有笑话会长得要分页显示,但是许多内容驱动的站点防止内容过长的最好的方法就是将其分页显示。使用PHP的另一个正则表达式的函数可以很容易地实现这种功能。

  split是这样一个函数:它接受一个正则表达式和一个文本字符串并通过字符串对正则表达式的匹配将其分开,并存储到数组中。参看下面的例子:


$regexp="[ ]+"; //一个或更多的空白字符
$text="This is a test.";
$textarray=split($regexp,$text);
echo("$textarray[0]<BR>"); //输出"This<BR>"
echo("$textarray[1]<BR>"); //输出"is<BR>"
echo("$textarray[2]<BR>"); //输出"a<BR>"
echo("$textarray[3]<BR>"); //输出"test.<BR>"

  如果用一个[PAGEBREAK]标志取代这里的空白字符,并用显示我们感兴趣的页面(在页面请求中通过$page变量传递)取代显示全部的划分结果,我们就可以成功将内容分页。

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:用PHP和MySQL构建一个数据库驱动的网站(六)   下一篇:用PHP和MySQL构建一个数据库驱动的网站(八)

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号