2013-03-31 145 views
2

我有一个数据库,其中包含许多名称,包括具有特殊字符的外部名称,例如日基奇显示所有特殊字符html/php

当呼应这些名称中的某些字符显示为问号,其中一些节目,因为我使用的字符集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

这可能有帮助.. http://stackoverflow.com/questions/7311462/saving-serbian-latin-characters-in-database – Dinesh

+0

你试过utf8_encode($字符串)? –

+0

当我尝试它时,它将Žigić这个名字作为Žigi打印出来? – Koala

回答

0

我可能是错的,但去年我遇到了这个问题 在普通的文本板或字板中打开它,看看你输出查询的位置旁边是否有空格,并且它已经去掉了它们

或者下载你的数据库,并打开这些程序的SQL文件,并做相同的过程,也许它会显示 符号。

2

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

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

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

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

和删除该零件:

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

确保编码y我们的页面是UTF-8,你可以添加以下的头部标签:

<meta charset="utf-8"> 

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

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

1

您还需要设置数据库< - > PHP传送编码:在进行任何查询之前

mysqli_set_charset("utf8"); 

。由于您的数据现在将变为UTF-8,因此请将页面编码声明保留为UTF-8。