我的 table 看起来像这样-
province_id int(11)
province_title char(200) utf8_general_ci
parent int(8) int(2)
我直接从 phpMyadmin(不是从 php 页面)插入了很多数据。但是当我检索这些数据并在 php 页面中显示它们时,就会出现特殊字符问题。
喜欢-
Québec shows - Qu�bec.
我的 html 标题看起来像 -
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
我认为问题可能是在插入数据时发生的。我如何在 phpmyadmin 中转换这些数据?有帮助吗?
最佳答案
您似乎没有在所有地方 使用 utf-8,因此您的数据在某些时候变得一团糟。根据您的具体操作,您必须更改/添加以下一个或多个点(很可能是您忘记的 SET CHARSET
/mysql_set_charset
):
告诉 MySQL 使用 utf-8。为此,请将其添加到您的 my.cnf 中:
collation_server = utf8_unicode_ci character_set_server = utf8
在与 mysql 交互之前,发送这两个查询:
SET NAMES 'utf8'; CHARSET 'utf8';
或者,或者,让 php 在打开连接后执行此操作:
mysql_set_charset('utf8', $conn); // when using the mysql_-functions mysqli::set_charset('utf8') // when using mysqli
将 UTF-8 设置为数据库的默认字符集
CREATE DATABASE `my_db` DEFAULT CHARACTER SET 'utf8';
对表格做同样的事情:
CREATE TABLE `my_table` ( -- ... ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
假设客户端是浏览器,将您的内容作为 utf-8 和正确的 header 提供:
header('Content-type: text/html; charset=utf-8');
要真正确保浏览器理解,请添加元标记:
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
最后但同样重要的是,告诉浏览器使用 utf-8 提交表单
<form accept-charset="utf-8" ...>
关于php mysql特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10721867/