当前位置:首页 > PHP

php实现微博@

2026-02-16 14:12:34PHP

实现微博@功能的方法

在PHP中实现微博的@功能,可以通过正则表达式匹配、数据库查询和前端交互完成。以下是具体实现步骤:

匹配用户昵称

使用正则表达式匹配文本中的@符号和用户昵称:

$pattern = '/@([a-zA-Z0-9_\x{4e00}-\x{9fa5}]+)/u';
preg_match_all($pattern, $content, $matches);
$mentionedUsers = array_unique($matches[1]);

查询用户ID

根据匹配到的昵称查询数据库获取用户ID:

php实现微博@

foreach ($mentionedUsers as $username) {
    $user = $db->query("SELECT id FROM users WHERE username = '$username'");
    if ($user) {
        $mentionedUserIds[] = $user['id'];
    }
}

存储提及关系

将提及信息存入数据库:

foreach ($mentionedUserIds as $userId) {
    $db->insert('mentions', [
        'post_id' => $postId,
        'user_id' => $userId,
        'created_at' => date('Y-m-d H:i:s')
    ]);
}

前端高亮显示

使用JavaScript实现前端@用户的高亮效果:

php实现微博@

function highlightMentions(text) {
    return text.replace(/@([a-zA-Z0-9_\u4e00-\u9fa5]+)/g, '<span class="mention">@$1</span>');
}

发送通知

当用户被@时发送通知:

foreach ($mentionedUserIds as $userId) {
    $notification = [
        'user_id' => $userId,
        'type' => 'mention',
        'data' => json_encode(['post_id' => $postId]),
        'created_at' => date('Y-m-d H:i:s')
    ];
    $db->insert('notifications', $notification);
}

安全性考虑

对用户输入进行过滤防止XSS攻击:

$content = htmlspecialchars($content, ENT_QUOTES, 'UTF-8');

以上方法组合使用可以实现完整的微博@功能,包括识别提及、存储关系、前端展示和通知提醒。

标签: php
分享给朋友:

相关文章

php实现文件上传

php实现文件上传

PHP 文件上传实现方法 在 PHP 中实现文件上传需要处理 HTML 表单和服务器端脚本。以下是详细步骤: 创建 HTML 表单 使用 enctype="multipart/form-data"…

php实现图片上传

php实现图片上传

实现图片上传的基本步骤 创建HTML表单用于文件上传,表单需设置enctype="multipart/form-data"属性,确保文件数据正确传输。 <form action="upload…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素(不移…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Sessi…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为…