虚拟主机rawurlencode搜索_UTF-8与GBK统一
很多站长遇到 rawurlencode搜索只改页面 meta,搜索还是乱码,因为数据库连接字符集没设。PHP 连 MySQL 后要执行 SET NAMES utf8mb4(或 gbk),否则 PHP 发送给 MySQL 的关键词编码和数据库不一致,搜索无结果或乱码。
PHP 搜索转码代码:$keyword = $_GET['keyword']; $keyword = mb_convert_encoding($keyword, 'UTF-8', 'auto'); auto 自动检测编码(UTF-8, GBK, BIG5)。或用 iconv('GBK', 'UTF-8//IGNORE', $keyword),//IGNORE 忽略无法转换的字符。转码后再拼 SQL 搜索。
参考(数据库连接字符集): ``` <?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 里的关键词是否正常编码,F12 看请求参数编码。搜索结果页面标题和摘要不乱码。不同浏览器(Chrome、Firefox、IE)测试,IE 对 GBK 编码处理不同,重点测。
搜索关键词安全:转码后还要防 SQL 注入,用 PDO 预处理或 mysqli 绑定参数,不要直接拼 SQL。关键词长度限制(如 50 字符),特殊字符过滤。搜索功能是注入高发区,编码统一和参数绑定都要做。

更新时间:2026-08-27 10:22:32