我正在爲我正在處理的網站的管理部分構建數據導入工具。數據有法文和英文,並且包含許多重音字符。每當我嘗試上傳文件,解析數據並將其存儲在我的MySQL數據庫中時,重音都被替換爲'?'。上傳文件中的口音被替換爲'?'
我有文本文件包含數據(字符集是iso-8859-1),我上傳到我的服務器使用CodeIgniter的文件上傳庫。然後我用PHP讀取文件。
我的代碼是與此類似:
$this->upload->do_upload()
$data = array('upload_data' => $this->upload->data());
$fileHandle = fopen($data['upload_data']['full_path'], "r");
while (($line = fgets($fileHandle)) !== false) {
echo $line;
}
這將產生與更換口音線 '?'。其他一切都是正確的。
如果我通過FTP從我的服務器上下載我上傳的文件,charset仍然是iso-8850-1,但差異顯示文件已更改。但是,如果我在TextEdit中打開文件,它會正確顯示。
我試圖使用PHP的stream_encoding
方法明確地將我的文件流設置爲iso-8859-1,但我的PHP版本沒有該方法。
在想法用完之後,我試着在utf8_encode
和utf8_decode
中包裝我的字符串。都沒有工作。
如果有人對我可以嘗試的事情有什麼建議,我會非常感激。
如果我通過fgets()直接回顯正在讀入的字符串,它們會有問號而不是重音。我不認爲這個問題與MySQL有關。 – Katfish
@Katfish請參閱編輯 – calumbrodie
我在命令行中使用'file -I'檢查了文件的字符集。我使用Eclipse創建和編輯PHP文件,並將它們編碼爲ascii。我正在使用Filezilla上傳文件,但編碼似乎通過這種方式得以保留 - 當我下載以前上傳的文件時,它們仍然具有原始的字符集。 –
Katfish