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

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

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

第七章:内容的格式和提交

  现在我们基本上已经大功告成了。我们已经设计了一个数据库用来存储笑话,将它们组织到目录中,并标志它们的作者。我们也已经学会了如何建立一个Web页来向我们的访问者显示我们的笑话库。我们还开发了一系列的Web页以使得网站的管理者不需要任何数据库的知识就能管理笑话库。

  当我们这样做之后,我们已经解决了这么一个头疼的问题,那就是不断地插入新的内容到HTML模板中,并产生大量难管理的HTML文件。现在,HTML已经完全和显示的数据分开了。如果你想重新设置这个网站,你只需要改变显示给访问者的PHP文件中的HTML。对一个文件夹的修改(例如改变字体)会立即反映到所有笑话的显示,因为所有的笑话都使用同一个PHP文件来显示。在管理这个Web站点的内容时仅仅还有一个情况需要用到HTML:内容的格式。

  除了一些最简单的Web站点之外,我们总是需要允许内容(在这里是指笑话)有自己可应用的格式。一个简单的情况是,你仅需要能将文本分段。然而,更通常的情况是,内容的提供者还希望能够简单地实现文字的粗体、斜体或者是超连接等等。

  我们目前的数据库和网站设计支持所有的这些功能,因为一个网站的管理者可以在笑话的内容中包含HTML标志,而在将笑话的内容插入到网站的访问者请求的页面中时也能起到它当初的效果。然而,为了实现我们系统管理完全不需要HTML的知识,我们需要提供一些其它的方法以格式化文本。

  在本章中,我们会学习一些新的PHP函数,这些函数可以让我们能够提供基本的文本格式而不需要使用HTML。当我们这样做了之后,我们会真正拥有一个足够简单的可以供第一个有Web浏览器的人使用的内容管理系统。有了这个功能之后,我们可以再次允许用户提供它们自己的笑话--而这一次,我们不必再担心我们的站点会充满令人讨厌的或其它不适当的东西。

排除原有的干扰

  在我们提供一个有关格式化内容的新的方法之前,我们首先必须排除旧东西的影响。一些没有HTML知识的人可能会不知不觉地在一个纯文本的文档中包含HTML语法(然而是无效的),这将引起意想不到的后果,甚至会损坏我们的页面的显示效果。我们先来看看下面的句子:

The gunman drew his weapon. <BANG!>

  如果有人将上面的文字录入到数据库中,在Web页显示这个内容他也许会奇怪最后的那个单词(<BANG!>)怎么不见。有一些基本的HTML知识的人会意识到Web浏览器已经将这一段作为无效的HTML标志忽略了,但是我们需要迎合根本没有任何HTML知识的用户。

  在第五章中,我们曾经看到一个PHP函数可以巧妙地处理这个问题:htmlspecialchars。这个函数在将我们的笑话插入到一个Web页时,将其转换成一种“HTML安全”的格式:

The gunman drew his weapon. <BANG!>

  当反馈到网站访问者的Web浏览器时,这会显示出我们当初所预想的结果。因此,作为第一步,我们需要修改我们的网站用来显示笑话内容的PHP文件,在文本输出到页面之前使用htmlspecialchars:


<!-- joke.php -->
...
// Get the joke text from the database
$joke = mysql_query("SELECT JokeText FROM Jokes ".
                    "WHERE ID=$id");
$joke = mysql_fetch_array($joke);
$joketext = $joke["JokeText"];

// Filter out HTML code
$joketext = htmlspecialchars($joketext);

echo( $joketext );
...

  我们已经使出现在内容中的HTML代码失效了。现在我们可以通过执行我们自己的特别的标志语言来执行我们自己的内容格式。

正则表达式

  执行我们自己的标志语言会包含在笑话的文本中找出我们自己的标志并在输出到用户的浏览器前将其替换成相应的HTML。每一个了解正则表达式的人都会意识到使用与此正则表达式很适合于处理这些工作。

  一个正则表达式是一个可能包含指定代码的字符串,它可以被一些PHP函数用来搜寻和处理文本。下面的这个例子就是一个正则表达式,它可以用来搜索“PHP”(没有引号):

PHP

  不太复杂,是吗?要使用一个正则表达式,你必须熟悉PHP中使用正则表达式的函数。ereg是其中最基本的,它可以用来判断一个正则表达式是否匹配具体的字符串。请参看下面这段代码:


$text = "PHP rules!";

if (ereg("PHP", $text)) {
  echo( '$text contains the string "PHP".' );
} else {
  echo( '$text does not contain the string "PHP".' );
}

  在这个例子中,正则表达式是匹配的,因为存储在变量$text中值包含“PHP”。这样,上面的代码的输出将是这样的(注意这里的单引号使用PHP不会用相应的$text的值取代$text):


$text contains the string "PHP".
    eregi的功能基本上和ereg相同,只是它忽略被搜索的文本的大小写:
$text = "What is Php?";

if (eregi("PHP", $text)) {
  echo( '$text contains the string "PHP".' );
} else {
  echo( '$text does not contain the string "PHP".' );
}
    这会输出同样的信息:
$text contains the string "PHP".

  正如我们上面提到的,在正则表达式中可以使用一些特殊的代码。其中的一些代码可以容易混淆,而且也很难记,如果你想要很好地使用它,你需要找到一本好的参考。有关标准正则表达式的语法的指南格式的参考你可以从http://www.delorie.com/gnu/docs/rx/rx_toc.html中找到,在Wrox Press编写的专业PHP程序设计一书的附录中也包含了正则表达式语法的参考。让我们通过一些例子来学习一些基本的正则表达式的语法。

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



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

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