我有一个包含很多名字的数据库,包括具有特殊字符的外国名称,例如日基奇
当回显这些名字时,一些字符显示为问号,而某些显示因为我使用字符集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个字符或一个名称,名称数据库包含数百个名称。
任何人都可以帮助我,谢谢。
答案 0 :(得分:2)
为了在整个项目中保持统一的UTF-8编码, 尝试
$pdo->exec('set names utf8');
在查询之前,或理想地将charset附加到连接字符串,如下所示:
"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输出的字符集的一致性,只要您选择的字符集具有您需要的字符,就应该没问题。
答案 1 :(得分:1)
您还需要设置数据库&lt; - &gt; php传输编码:
mysqli_set_charset("utf8");
在进行任何查询之前。将页面编码声明保持为UTF-8,因为您的数据现在将是UTF-8。
答案 2 :(得分:0)
我可能错了,但我去年有这个问题 在常规文本垫或文字垫中打开它,看看你输出查询的地方旁边是否有空格我做了那个并且它摆脱了它们
或者可能下载你的数据库并用这些程序打开sql文件并执行相同的过程,也许它会显示 符号。