我的问题是,直接通过PHP编写的内容是正确的强调,但当强调的单词来自MySQL时,字母就像这样 。
我尝试使用html charset
作为ISO-8859-1
并修复了MySQL字母,但打破了其他字母。解决这一问题的一种方法是将我的.php
文件设置为ISO-8859-1
,但我不能这样做,我需要在utf-8 encode
中使用它。
我该怎么办?
目前解决方案:在查询之前包含mysqli_set_charset($link, "utf8");
(每次连接只需要执行一次)。我仍在寻找服务器上的决定性解决方案,而不是客户端。
编辑:
mysql> SHOW VARIABLES LIKE 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-----------------+
| Variable_name | Value |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
+----------------------+-----------------+
mysql> show variables like "character_set_database";
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| character_set_database | utf8 |
+------------------------+-------+
1 row in set (0.00 sec)
mysql> show variables like "collation_database";
+--------------------+-----------------+
| Variable_name | Value |
+--------------------+-----------------+
| collation_database | utf8_general_ci |
+--------------------+-----------------+
1 row in set (0.00 sec)
这些是我的数据库的值,但我仍然无法做到正确。
EDIT2:
<meta charset="utf-8">
...
$con = mysqli_connect('localhost', 'root', 'root00--', 'eicomnor_db');
$query = "SELECT * FROM table";
$result = mysqli_query($con, $query);
while ($row = mysqli_fetch_assoc($result)) {
echo "<tr>";
echo "<td>" . $row['id'] . "</td>";
echo "<td>" . $row['nome'] . "</td>";
echo "</tr>";
}
mysqli_close($con);
这是PHP代码。
答案 0 :(得分:2)
首先,不要尝试在ISO-8859-1的方向修改你的php文件,这是向后的,并且可能导致浏览器的兼容性问题。相反,您希望从下到上遵循utf-8的路径。
在
最容易检查的是确保你以uf-8的形式提供你的html:
您的apache配置中的AddDefaultCharset utf-8
可能对此有所帮助,
并且你的html标题中也会<meta charset="utf-8">
。
要检查的第二件事是确保mysql连接&amp;整理 使用utf-8: http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html或http://docs.moodle.org/23/en/Converting_your_MySQL_database_to_UTF8
在 最终和最烦人的步骤是转换实际中的任何数据 数据库到utf-8。首先使用标准的mysql转储备份数据!有一些技巧可以通过创建数据库转储为utf-8来简化此过程,然后使用正确的排序规则将其重新放回系统,但请注意,这是一个微妙的过程,并确保您有一个可靠的备份先工作! http://docs.moodle.org/23/en/Converting_your_MySQL_database_to_UTF8是该流程的良好指南。
答案 1 :(得分:1)
你试过iconv吗?如您所知,DB上使用的字符集是ISO-8859-1,您可以转换为您的字符集(我假设为UTF-8):
// Assuming that $text is the text coming from the DB
$text = iconv("ISO-8859-1", "UTF-8", $text)
答案 2 :(得分:0)
假设您将输出发送到浏览器,您需要确保设置了正确的字符集<meta charset="utf-8" />
,并且不要在浏览器设置中覆盖它(检查它是“自动”还是“uft” -8" )。
答案 3 :(得分:0)
在查询之前包含mysqli_set_charset($link, "utf8");
(每次连接只需要执行一次)可以解决问题。