【PHP入门】可复用的魔法!如何用函数(function)生成摘要文本
在博客列表页面等处,你是否曾想过只显示每篇文章开头的简短部分?用于告诉读者“这篇文章是关于这个内容的”的“摘要文本”,在提高网站的浏览率方面非常重要。但是,每增加一篇文章就手动制作摘要,一定很麻烦吧?
本文将介绍一个能解决这一烦恼的PHP魔法工具——函数(function)。让我们来尝试自己动手,用PHP函数制作一个方便的“摘要文本生成工具”,它可以接收长篇文章,按指定的字数进行裁剪,并在末尾加上“...阅读更多”。我们还会讲解作为安全对策必不可少的htmlspecialchars()函数,让你能获得既安全又实用的代码。即使是初学者也可以直接复制粘贴!
要准备运行PHP(开发环境),如果还没有搭建XAMPP的朋友,请参考【PHP入门】XAMPP下载及安装方法完全解析!。 安装后,将PHP文件放置在指定文件夹(如 `htdocs`)中,准备工作就完成了!
1. 整理代码的魔法“函数”是什么?
首先,“函数”是什么呢?简单来说,它就像一个“自制工具”,将特定的处理打包并命名,以便随时调用使用。
例如,如果你把“接收文章,裁剪成100个字,并在末尾加上‘...’”这一系列处理制作成一个函数,那么每次需要摘要时,只需调用该函数即可。这样就不必重复编写相同的代码,使整个代码变得整洁且易于管理,这就是函数的最大优点。
基本语法如下:
<?php
function 函数名(参数1, 参数2, ...) {
// 在这里编写要执行的处理
return 返回值; // 返回处理结果
}
?>
如果把参数看作是传递给函数的“材料”,把返回值看作是函数返回的“完成品”,就很容易理解了。那么,我们就用这个语法来制作摘要生成函数吧。
2. 实践!来制作一个生成摘要的函数吧
这里是本文的重点。我们将创建一个名为make_excerpt()的函数,当你指定长篇文章和字数时,它会返回一个恰到好处的省略摘要。以下代码是一个完整的HTML示例,你可以直接复制粘贴到文件中,并立即在浏览器中确认其运行效果。
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>摘要文本生成工具</title>
<style>
body { font-family: sans-serif; line-height: 1.6; padding: 20px; }
.original-text { background: #f4f7f6; border-left: 5px solid #ccc; padding: 10px; margin-bottom: 20px; }
.excerpt { background: #e8f4f8; border-left: 5px solid #007bff; padding: 10px; }
</style>
</head>
<body>
<h1>摘要生成测试</h1>
<?php
/**
* 生成摘要文本的函数
* @param string $text 原始文章
* @param int $length 限制字数
* @return string 生成的摘要文本
*/
function make_excerpt(string $text, int $length): string {
// 检查原始文章的字数
if (mb_strlen($text) > $length) {
// 按指定字数裁剪,并在末尾添加“...阅读更多”
return mb_substr($text, 0, $length) . '...阅读更多';
} else {
// 如果字数少于限制,则直接返回原文
return $text;
}
}
// 作为源的长篇文章
$long_text = '这是一篇非常长的文章。本文详细解说了如何使用PHP函数将文章裁剪为特定字数并生成摘要。这是在博客列表页面等场景中非常有用的实用技巧。';
// 调用函数生成50个字的摘要
$excerpt_text = make_excerpt($long_text, 50);
?>
<h2>原始文章</h2>
<div class="original-text">
<?php echo $long_text; ?>
</div>
<h2>生成的摘要(50字限制)</h2>
<div class="excerpt">
<?php echo $excerpt_text; ?>
</div>
</body>
</html>
此代码的要点是mb_strlen()和mb_substr()。要正确处理像中文这样的多字节字符,必须使用以`mb_`开头的函数,而不是strlen()或substr()。这样可以防止乱码,并确保能按预期的字数进行裁剪。
3. 重要!使用htmlspecialchars确保安全显示
在网页上显示文本时,绝对不能忘记的是安全对策。如果要显示的文本中包含<script>之类的HTML标签,直接显示可能会引发意想不到的操作(跨站脚本攻击)。
这时htmlspecialchars()函数就派上用场了。这个函数会将HTML中具有特殊意义的字符(例如:<, >, &, ")转换为无害的字符串(例如:<, >, &, ")。
我们也把这个处理整合到摘要生成函数中,使其更加安全吧。
<?php
/**
* 生成安全摘要的改进版函数
*/
function make_safe_excerpt(string $text, int $length): string {
// 1. 首先用htmlspecialchars进行转义
$safe_text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
// 2. 对转义后的文本进行字数检查和裁剪
if (mb_strlen($safe_text) > $length) {
return mb_substr($safe_text, 0, $length) . '...阅读更多';
} else {
return $safe_text;
}
}
// 可能包含HTML标签的文章
$dangerous_text = '<strong>强调</strong>的文本和<script>alert("danger!");</script>这样的恶意代码。';
// 使用改进版函数生成安全的摘要
$safe_excerpt = make_safe_excerpt($dangerous_text, 20);
echo $safe_excerpt;
?>
使用这个`make_safe_excerpt()`函数,即使原文中包含HTML标签,它们也只会被当作普通字符串安全地显示出来,不用担心会破坏页面布局或执行脚本。
4. 应用示例:与foreach循环结合使用
那么,让我们把这个方便的摘要生成函数与上一篇文章中学到的`foreach`循环结合起来吧。我们将从一个包含多篇博客文章的数组中,动态生成一个标题和摘要的列表。
<?php
// 生成安全摘要的函数(假定已在前面的例子中定义)
function make_safe_excerpt(string $text, int $length): string {
$safe_text = htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
if (mb_strlen($safe_text) > $length) {
return mb_substr($safe_text, 0, $length) . '...阅读更多';
}
return $safe_text;
}
// 博客文章数据数组
$blog_posts = [
[
"title" => "掌握PHP基础",
"content" => "本文解说PHP的基本语法和变量。内容设计得让编程初学者也能安心学习,请务必阅读。"
],
[
"title" => "数据库连接的秘诀",
"content" => "Web开发中不可或缺的数据库。阅读本文,你就能在5分钟内学会如何从PHP连接到MySQL数据库,并获取和操作数据。文中还附有丰富的示例代码。"
]
];
?>
<div class="post-list">
<?php foreach ($blog_posts as $post): ?>
<article>
<h3><?php echo htmlspecialchars($post['title']); ?></h3>
<p><?php echo make_safe_excerpt($post['content'], 60); ?></p>
</article>
<?php endforeach; ?>
</div>
就这样,一旦创建了函数,就可以在网站的各个地方(如循环处理中)反复调用。提高代码的复用性和简化维护是函数的一大魅力。
5. 总结与相关代码介绍
这次,我们学习了如何使用PHP的“函数”来按指定字数裁剪文章,并生成安全的摘要。函数化的优点在于代码的整理和复用性的提高。这次制作的`make_safe_excerpt`函数,想必会在你的网站制作项目中成为一个多次发挥作用的便利工具。
PHP还准备了许多其他方便的字符串操作函数。例如,用于搜索特定字符串的`mb_strpos()`、进行替换的`str_replace()`,以及完全去除HTML标签的`strip_tags()`等。通过组合使用这些函数,还可以实现更高级的文本处理。请务必多加研究和尝试。