使用PHP和MySQL强调字符时出错

时间:2013-10-09 20:35:09

标签: php mysql character-encoding

我的问题是,直接通过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代码。

4 个答案:

答案 0 :(得分:2)

首先,不要尝试在ISO-8859-1的方向修改你的php文件,这是向后的,并且可能导致浏览器的兼容性问题。相反,您希望从下到上遵循utf-8的路径。

祝你好运!旧数据库的字符集问题通常比最初出现的情况更多。

答案 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");(每次连接只需要执行一次)可以解决问题。