2017-05-26 64 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解決了它。謝謝。 –