2010-07-17 51 views
2

在Web服務器上,我有一個解析.sql文件(直接存儲在服務器上)的php腳本,並執行在一個mysql數據庫上的查詢。我有很多法國人物插入不好:é變成é©。解析一個uft-8文件並將其插入到數據庫中會破壞特殊字符,如'

當我用記事本++打開sql文件時,發現編碼是「沒有BOM的uft-8」。

我的劇本是這樣的:

$handle = fopen("test.sql", "r") or die("couldn't get handle"); 
if ($handle) 
{ 
    while (!feof($handle)) 
    { 
     $buffer = fgets($handle, 4096); 
     if (strlen ($buffer) < 3) // if we have a blank line 
     {  
      mysql_query($query); 
      $query = $buffer; 
      sleep(0.5); 
     } 
     else 
     { 
      $query .= $buffer; 
     } 
    } 
    mysql_query($query); // last insert 
    fclose($handle); 
} 

當我打開通過phpmyadmin數據庫,我看到特殊字符在腳本執行之後已經破裂。

回答

1

相反,你應該使用mysql_set_charset功能,而不是一組名稱查詢,截至http://www.php.net/manual/en/function.mysql-set-charset.php

即使你的數據庫是UTF-8,和PHP交易在UTF-8中,默認情況下建立的連接可能是一個Latin-1連接,所以MySQL會嘗試轉換數據,即使它不應該這樣做。

+0

不錯!作爲註釋狀態:「注意:這是更改字符集的首選方式,不建議使用mysql_query()執行SET NAMES ..」 目前,我認爲我沒有最近的版本的MySQL,但我會一定記得這一點,因爲我更新它。 非常感謝。 – Phillaf 2010-07-17 20:34:09

相關問題