2017-05-26 26 views
0

我有两台服务器。每个都运行PHP/MySQL。我将剪贴板中的6个字符的字符串粘贴到两个数据库中新创建的表中。对表列的检查表明,在两台服务器上,charset和collat​​ion都设置为“utf8”和“utf8 general ci”。然后,我在两台服务器上运行以下相同的脚本。来自MySQL的乱码字符

<meta charset="utf-8"> 
<?php 
$sql = "SELECT * FROM temp"; 
$link=mysqli_connect($DB_SERVER,$DB_LOGIN,$DB_PASSWORD,$DB); 
$result=mysqli_query($link,$sql); 
mysqli_close($link); 
$row=mysqli_fetch_object($result); 
$details=$row->details; 
echo $details; 
?> 

一台服务器发送以下屏幕

â€~good’

其他在同一浏览器将其发送至屏幕(火狐)

'好'

任何人都可以发现问题或建议我如何解决这个问题?

+0

如何将数据*转换为* mysql?字符也可能在进入时被破坏。你说你从剪贴板中复制它,但它必须比这更复杂:你使用什么程序来实际获取数据到mysql?这显然不能解决你的问题,但要指出的是,首先可能发生的修改的唯一原因是你的单引号实际上不是单引号,而是unicode字符,最有可能是U + 2018和U + 2019 –

+0

我会直接检查两个数据库以查看数据库所在的内容(最好使用命令行中的mysql)。如果你看到两个都是一样的,那么这些角色可能会在输出时被损坏。如果一个人存储了不同的结果,那么你的角色在输入时会受到损坏。 –

+0

请参阅https://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-store中的“Mojibake” –

回答

1

问题:

浏览器误解了编码。

可能的原因:

  1. 你没有指定的mysqli连接的编码,使用mysqli::set_charset()
  2. 没有指定HTML 5 DOCTYPE <!DOCTYPE html>,使的Unicode(UTF-8)
  3. 另一个编码在HTTP标头中指定
  4. 网络服务器为该页面提供另一种编码和覆盖header()
  5. 没有配置中,一个PHP实例可能与另一个实例相比配置不同。
  6. 如果没有配置一个PHP实例可能是5.6之前的旧版本,它没有默认配置UTF-8。
  7. 数据粘贴到两个数据库中的方式不同,您可能需要仔细检查。
+0

您列出了7个原因。原因1解决了它。谢谢。 –