[英]PHP URLDecode / UTF8_Encode Character Set Issues with special characters
[英]PHP: characters wrongly encoded in csv when using utf8_encode
從MySql數據庫提取數據並將其插入CSV文件時,我遇到一個奇怪的問題。 在數據庫中,字段值如下:
K Secure Connection 1 año 1 PC
當我在將其寫入CSV文件之前echo
它時,我在終端中得到的與上述相同。
我使用以下代碼將內容寫入CSV文件:
fwrite($this->fileHandle, utf8_encode($lineContent . PHP_EOL));
但是,當我使用LibreOffice Calc打開CSV(並將UTF-8指定為編碼格式)時,將顯示以下內容:
K Secure Connection 1 año 1 PC
我不知道為什么會這樣。 有人可以解釋如何解決嗎?
REM:
SELECT @@character_set_database;
退貨
latin1
REM 2:
`var_dump($lineContent, bin2hex($lineContent))`
給
string(39) "Kaspersky Secure Connection 1 año 1 PC"
string(78) "4b6173706572736b792053656375726520436f6e6e656374696f6e20312061c3b16f2031205043"
var_dump
顯示該字符串已經以UTF-8編碼。 在其上使用utf8_encode
會使它顯示亂碼(該函數嘗試從Latin-1 轉換為UTF-8)。 因此,您實際上是在將UTF-8編碼的“año”寫入文件,然后由LibreOffice“正確”提取。
只需不要utf8_encode
。
我會嘗試使用其他編輯器打開csv文件,只是為了確保te問題不在辦公室...
如果內容已經采用UTF-8格式,則可能會對其進行雙重編碼。
我還更喜歡不使用UTF-8,因此我已經從數據庫中以UTF-8格式獲取數據,不需要進行任何轉換。 為此,我在打開SQL連接后立即運行此查詢:
"set names 'utf8'"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.