2

我有一个数据库,其中包含很多名称,包括具有特殊字符的外国名称,例如 Žigić

当回显这些名称时,一些字符显示为问号,其中一些显示是因为我使用的是字符集 ISO-8859-1

例如,当我从数据库中回显名称 Žigić 时,它看起来像这样:

齐?

我目前正在使用此代码尝试启用所有特殊字符

<meta charset="iso-8859-1">

我已经尝试过 UTF-8 但这只是打印这样的名称:

�igi?

这是我尝试使用的完整代码:

$getPlayerStats = $db->query("SELECT * FROM `playerstats` WHERE `playerid` = '".$_GET['id']."'");

echo '<meta charset="iso-8859-1"><table border="1">
<tr>
<td>First Name</td>
<td>Second Name</td>

</tr>';

while ($playerStats = mysqli_fetch_array($getPlayerStats))//Loop it.
{




    echo '<tr>';
    echo '<td>'.$playerStats['firstname'].'</td>';
    echo '<td>'.$playerStats['lastname'].'</td>';

    echo '</tr>';
}
echo '</table>';

请注意,这个问题不仅仅针对 1 个字符或一个名称,名称数据库包含数百个名称。

谁能帮帮我,谢谢。

4

3 回答 3

2

为了在整个项目中保持统一的 UTF-8 编码,请尝试

$pdo->exec('set names utf8');

在您的查询之前,或者理想情况下将字符集附加到您的连接字符串,如下所示:

"mysql:host=$host;dbname=$db;charset=utf8"

并删除这部分:

<meta charset="iso-8859-1">

确保您的页面的编码是 UTF-8,您可以在 head 标签中添加以下内容:

<meta charset="utf-8">

编辑:看到你的使用$db让我错误地假设你正在使用 PDO。正如您问题的另一个答案中所指定的,您应该使用mysqli_set_charset来设置与 MySQL 的连接的字符集。数据库的排序规则与您接收数据的编码无关,只要它具有您需要的字符即可。

总而言之,只需确保用于连接数据库和 HTML 输出的字符集的一致性,只要您选择的字符集具有您需要的字符,您就应该没问题。

于 2013-03-31T08:10:43.753 回答
1

您还需要设置数据库<->php 传输编码:

mysqli_set_charset("utf8");

在进行任何查询之前。将页面编码声明保留为 UTF-8,因为您的数据现在将是 UTF-8。

于 2013-04-01T11:18:53.400 回答
0

我可能错了,但去年我遇到了这个问题,用普通文本键盘或写字板打开它,看看你输出查询的旁边是否有空格我这样做了,它摆脱了它们

或者也许下载您的数据库并使用这些程序打开 sql 文件并执行相同的过程,也许它会显示 � 符号。

于 2013-03-31T06:57:02.710 回答