UTF-8搜索GBK_urlencode与数据库字符集
UTF-8搜索GBK 的核心是编码统一。HTML 页面 meta charset、PHP 文件保存编码、数据库连接字符集、数据库表字符集,四个地方一致才不会乱码。UTF-8 站点全用 utf8mb4,GBK 站点全用 gbk,不要混用。
URL 编码处理:搜索表单 method="get" 时,关键词出现在 URL 里(?keyword=中文),浏览器自动 urlencode。PHP 接收时 $_GET 已经自动 urldecode,不需要手动解码。但如果是自己拼 URL 传关键词,要用 urlencode($keyword) 编码,接收端自动解码。
参考(数据库连接字符集): ``` <?php // MySQLi $mysqli = new mysqli('localhost', '用户', '密码', '数据库'); $mysqli->set_charset('utf8mb4');
// PDO $pdo = new PDO('mysql:host=localhost;dbname=数据库;charset=utf8mb4', '用户', '密码');
// 旧版mysql(已废弃) mysql_query('SET NAMES utf8mb4');
-- 查看数据库字符集 SHOW VARIABLES LIKE 'character%'; -- 修改表字符集 ALTER TABLE 表名 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; ```
页面编码与数据库不一致是搜索转码中的常见问题。编码不匹配先统一四个编码点;关键词被截断是 URL 长度限制或特殊字符,用 POST 方式;搜索无结果是转码后关键词和数据库不匹配,echo 出转码后的关键词和 SQL 语句调试;ajax 搜索乱码检查响应头 charset。
搜索关键词安全:转码后还要防 SQL 注入,用 PDO 预处理或 mysqli 绑定参数,不要直接拼 SQL。关键词长度限制(如 50 字符),特殊字符过滤。搜索功能是注入高发区,编码统一和参数绑定都要做。

更新时间:2026-08-26 23:43:11