我的知识记录

程序搜索转码_urlencode与数据库字符集

很多站长遇到程序搜索转码只改页面 meta,搜索还是乱码,因为数据库连接字符集没设。PHP 连 MySQL 后要执行 SET NAMES utf8mb4(或 gbk),否则 PHP 发送给 MySQL 的关键词编码和数据库不一致,搜索无结果或乱码。

数据库连接字符集:MySQLi 用 $mysqli->set_charset('utf8mb4'),PDO 用 dsn 加 charset=utf8mb4,旧版 mysql 用 mysql_query('SET NAMES utf8mb4')。连接字符集决定 PHP 和 MySQL 之间传输的编码,必须和数据库表字符集一致。

参考(PHP搜索转码代码): ``` <?php // 接收关键词 $keyword = isset($_GET['keyword']) ? trim($_GET['keyword']) : ''; // 自动转码为UTF-8 $keyword = mb_convert_encoding($keyword, 'UTF-8', 'auto'); // 或指定编码转换 // $keyword = iconv('GBK', 'UTF-8//IGNORE', $keyword); // 防注入(PDO预处理) $stmt = $pdo->prepare("SELECT * FROM 文章表 WHERE 标题 LIKE ? OR 内容 LIKE ?"); $like = "%$keyword%"; $stmt->execute([$like, $like]); $results = $stmt->fetchAll(); // 输出JSON时指定编码 header('Content-Type: application/json; charset=utf-8'); echo json_encode($results, JSON_UNESCAPED_UNICODE); ```

常见 CMS 的搜索编码:WordPress 默认 UTF-8,搜索不用转码;织梦 DedeCMS 有 GBK 和 UTF-8 版本,下载对应版本,搜索自动处理;Discuz 有 GBK 和 UTF-8,后台设置编码。用 CMS 不用自己写转码,选对编码版本即可。

搜索关键词安全:转码后还要防 SQL 注入,用 PDO 预处理或 mysqli 绑定参数,不要直接拼 SQL。关键词长度限制(如 50 字符),特殊字符过滤。搜索功能是注入高发区,编码统一和参数绑定都要做。

程序搜索转码_urlencode与数据库字符集

标签:

更新时间:2026-08-27 10:50:10

上一篇:网站飞书后台登录密码更改教程排查指南

下一篇:IIS Zblog伪静态规则配置教程_IIS常用程序伪静态规则教程详解