搜索框中文乱码_SET NAMES与PDO charset
35互联虚拟主机网站搜索关键字乱码,是页面编码、PHP 文件编码、数据库字符集三者不一致导致的。统一用 UTF-8 是最省事的方案,GBK 站点搜索 UTF-8 关键词或反过来都会乱码。搜索前用 iconv 或 mb_convert_encoding 转码,保证关键词和数据库编码一致。
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; ```
搜索优化:中文搜索用 LIKE '%关键词%' 会全表扫描,数据量大了慢。可以用 MySQL 全文索引(FULLTEXT)、Sphinx、Elasticsearch 等搜索引擎。编码统一是基础,搜索引擎也要求 UTF-8。
搜索引擎蜘蛛的搜索页面不要收录。搜索结果页 URL 带参数,内容重复度高,百度收录后会判定为低质量页面。用 robots.txt Disallow 搜索页,或搜索页加 noindex。搜索功能给用户用,不给蜘蛛抓。

更新时间:2026-08-27 11:26:33