当前位置: 首页 > 文章教程  > 计算机与互联网 > 网络编程

12.3.1删除模糊查询中关键字两边的空格

9/17/2020 9:37:07 PM 人评论

12.3.1删除模糊查询中关键字两边的空格

12.3 新闻发布系统中的字符串处理函数的应用

目前新闻发布系统还存在一些bug,某些bug可能导致系统隐患,通过使用字符串处理函数可以根除某些bug。

12.3.1 删除模糊查询中关键字两边的空格

将news_list.php程序中的两处代码片段:

$keyword = $_GET["keyword"];

修改为:

$keyword = trim($_GET["keyword"]);

即可删除模糊查询过程中关键字两边的空格。

12.3.2 修改文件下载功能的代码

若管理员用户发布一条新闻,并且该新闻存在一个“a+b.txt”文件名的附件,普通用户单击“a+b.txt”超链接下载该文件时,将提示用户“文件不存在或已删除”信息。而事实上“a+b.txt”文件名的附件确实存在,产生这个bug的原因是文件名中存在了某些URL特殊字符,使用PHP的$_GET数组读取数据时,这些特殊字符将被转义,从而导致文件下载失败,解决办法是将超链接中的查询字符串用urlencode()处理。

将news_detail.php程序中的代码片段:

<tr><td width="80"> 附 件 : </td><td><a href="download.php?attachment=<?php echo $news['attachment'];?>"><?php echo $news['attachment'];?></a></td></tr>

修改为:

<tr><td width="80"> 附 件 : </td><td><a href="download.php?attachment=<?php echo urlencode($news['attachment']);?>"><?php echo $news['attachment'];?></a></td></tr>

12.3.3 修改发表评论功能的代码

如果php.ini配置文件中的magic_quotes_gpc选项设为Off,当浏览器用户发表的新闻评论内容包含特殊字符(例如单引号),review_save.php程序将构造一条错误的SQL语句,导致新闻评论添加失败。这种bug的处理方法是将magic_quotes_gpc选项设为On。如果评论的内容包含特殊字符序列(例如JavaScript代码或HTML代码),review_list.php程序显示所有新闻评论的具体内容时,有可能导致系统隐患。

图12-37中评论的内容是一条JavaScript代码,当管理员用户使用review_list.php页面浏览新闻所有评论具体内容时,将导致页面重定向到百度首页,无法对该页的评论进行管理。避免产生这种bug的方法是使用htmlspecialchars()函数过滤评论的内容,将review_save.php程序中的代码片段:

figure_0301_0401
图12-37 发布评论

$content = $_POST["content"];

修改为:

$content = htmlspecialchars($_POST["content"]);

12.3.4 优化新闻列表显示功能的代码

在新闻标题列表显示页面news_list.php中,如果某些新闻标题过长,某些新闻标题过短,这将导致新闻标题列表显示页面不规整。解决这个问题的方法是将过长的新闻标题截取一定长度作为新闻的新标题。将news_list.php程序中的代码片段:

<a href="news_detail.php?news_id=<?php echo $row['news_id']?>"><?php echo $row['title']?></a>

修改为:

<a href="news_detail.php?news_id=<?php echo $row['news_id']?>"><?php echo mb_strcut($row['title'],0,40,"gbk")?></a>

12.3.5 模糊查询时关键字以加粗倾斜格式显示

新闻发布系统中按照关键字进行模糊查询时,可以将新闻详细信息中的关键字加粗倾斜显示以便醒目。将news_list.php程序中的代码片段:

<a href="news_detail.php?news_id=<?php echo $row['news_id']?>"><?php echomb_strcut($row['title'],0,40,"gbk")?></a>

修改为:

<a href="news_detail.php?keyword=<?php echo $keyword?>&news_id=<?php echo $row['news_id']?>"><?php echo mb_strcut($row['title'],0,40,"gbk")?></a>

此时单击新闻标题的超链接后,news_list.php页面将向news_detail.php页面传递包含有关键字keyword的查询字符串。news_detail.php接收到关键字后,将新闻标题以及新闻内容中的关键字使用加粗倾斜格式显示,修改后的news_detail.php代码如下(粗体字部分为代码改动部分,其他代码不变)。

……

mysql_free_result($result_user);

mysql_free_result($result_category);

mysql_free_result($result_news);

mysql_free_result($result_review);

//关键字加粗斜体显示

$title = $news['title'];

$content = $news['content'];

if(isset($_GET["keyword"])){

$keyword = $_GET["keyword"];

$replacement = "<b><i>".$keyword."</b></i>";

$title = str_replace($keyword,$replacement,$title);

$content = str_replace($keyword,$replacement,$content);

}

//显示新闻详细信息

?>

<table>

<tr><td width="80">标题:</td><td><?php echo $title;?></td></tr>

<tr><td width="80">内容:</td><td><?php echo $content;?></td></tr>

<tr><td width="80"> 附 件 : </td><td><a href="download.php?attachment=<?php echo $news['attachment'];?>"><?php echo $news['attachment'];?></a></td></tr>

……

12.3.6 优化分页函数代码

前面章节中制作的分页函数page(),语法格式为:

string page(int $total_records, int $page_size, int $page_current,string $url,string $keyword)

其中参数$url的功能是为“分页导航条”提供超链接的“目的地址”。如果$url参数自身带有查询字符串(例如index.php?url=review/review_list.php),此时构造“分页导航条”时,超链接的“目的地址”的正确格式应该为:

index.php?url=review/review_list.php&page_current=1。

但实际上, page()函数中构造的“分页导航条”中超链接的“目的地址”格式变成了:index.php?url=review/review_list.php?page_current=1。

显然 page()函数构造的查询字符串的格式出现了错误,有必要修改 page()函数的代码。将page.php页面的代码修改为如下代码(粗体字部分为代码的改动部分)。

<?php

function page($total_records,$page_size,$page_current,$url,$keyword){

$total_pages = ceil($total_records/$page_size);

$page_previous = ($page_current<=1)?1:$page_current-1;

$page_next = ($page_current>=$total_pages)?$total_pages:$page_current+1;

$page_start = ($page_current-5>0)?$page_current-5:0;

$page_end = ($page_start+10<$total_pages)?$page_start+10:$total_pages;

$page_start = $page_end-10;

if($page_start<0) $page_start = 0;

//判断$url中是否存在查询字符串

$parse_url = parse_url($url);

if(empty($parse_url["query"])){

$url = $url.'?'; //若不存在,在$url后添加?

}else{

$url = $url.'&'; //若存在,在$url后添加&

}

if(empty($keyword)){

$navigator = "<a href=".$url."page_current=$page_previous>上一页</a> ";

for($i=$page_start;$i<$page_end;$i++){

$j = $i+1;

$navigator = $navigator."<a href='".$url."page_current=$j'>$j</a> ";

}

$navigator = $navigator."<a href=".$url."page_current=$page_next>下一页</a>";

$navigator.= "<br/>共".$total_records."条记录,共".$total_pages."页,当前是第".$page_current."页";

}else{

$keyword = $_GET["keyword"];

$navigator = "<a href=".$url."keyword=$keyword&page_current=$page_previous>上一页</a> ";

for($i=$page_start;$i<$page_end;$i++){

$j = $i+1;

$navigator = $navigator."<a href='".$url."keyword=$keyword&page_current =$j'>$j</a> ";

}

$navigator =$navigator."<a href=".$url."keyword=$keyword&page_current=$page_next>下一页</a>";

$navigator.= "<br/>共".$total_records."条记录,共".$total_pages."页,当前是第".$page_current."页";

}

echo $navigator;

}

?>

至此新闻发布系统的功能日益完善。不过需要注意的是,修改后的news_detail.php代码还存在一个bug,当新闻的内容中包含有HTML代码,而搜索的关键字中也包含HTML代码时,有可能出现意想不到的结果,请读者根据本章的知识修改该bug。

相关教程

共有条评论 网友评论

验证码: 看不清楚?