2012-10-22 33 views
1

我試圖將字符串從HTML-ENTITIES轉換爲UTF-8,然後將編碼後的字符串保存到我的數據庫中。 html實體是希臘字母,並且看起來像這樣:νω將html實體轉換爲utf-8並將它們插入到mysql數據庫

現在我嘗試了數千種不同的方法,從使用utf8_encode或html_entity_decode開始,直到現在我遇到了函數mb_convert_encoding()。 現在真正奇怪的是,當轉換我的字符串,然後輸出它,它被正確編碼爲UTF-8,但是當插入這個字符串到我的數據庫時,我最終得到像這樣:ξÏνω

這是編碼代碼:

header('Content-Type: text/html; charset=utf-8'); 
mb_internal_encoding('utf-8'); 
...... 
while($arr = $select->fetch_array(MYSQLI_ASSOC)) 
{ 
$text = $arr["greek"]; 
$result = mb_convert_encoding($text, 'UTF-8', 'HTML-ENTITIES'); 
$mysqli->query("UPDATE some SET greek = '".$result."'");  
} 

當輸出我的查詢,然後手動做在phpMyAdmin SQL查詢它工作得很好,所以它似乎是我的分貝的問題。將編碼字符串傳輸到我的數據庫時必然會出現問題...

+0

什麼charset是你的數據庫中的表?默認是latin1,你需要把它改成utf-8。這是你應該檢查的第一件事。 – Landon

+0

數據庫設置爲utf-8。 – phpheini

+0

你可以在調用query()函數之前回顯你的查詢嗎?它看起來在那裏嗎? – Landon

回答

4

正如您在腳本中看到的那樣,您正在指示瀏覽器使用UTF8。這是第一步。

但是,您的數據庫需要相同的東西,並且表上的編碼/整理也需要使用UTF8。

您可以使用utf8_general_ciutf8_unicode_ci作爲對照重新創建表,或轉換現有的表(見here

您還需要確保你的數據庫連接即PHP代碼到MySQL使用UTF8。如果您正在使用PDO,有大量文章顯示如何做到這一點。最簡單的方法就是做:

$mysqli->query('SET NAMES utf8'); 

注意你現在做出改變是最終決定。如果將連接編碼更改爲數據庫,則可能會影響現有數據。

編輯你可以做以下設置連接的興趣

$mysqli = new mysqli($host, $user, $pass, $db); 

if (!$mysqli->set_charset("utf8")) { 
    die("Error loading character set utf8: %s\n", $mysqli->error); 
} 

$mysqli->close(); 

鏈接:

Whether to use "SET NAMES"

+0

我必須將整個數據庫設置爲utf8嗎?將我使用的表的字符集設置爲utf8還不夠嗎?因爲在輸出'$ mysqli-> character_set_name()'時它給了我latin1,所以整個db不在utf8中,但是表格是。我很困惑... – phpheini

+0

這裏有兩個問題。一個是你的表,即存儲數據的地方,一個是PHP和MySQL之間的連接。通過在表上設置編碼,您可以解決問題1.通過將連接字符串設置爲UTF8,您可以解決#2問題。'$ mysqli-> character_set_name()'返回連接的默認字符集(PHP到MySQL)。這現在是你的問題。它應該返回UTF8。 –

+0

看看我的回覆 - 我做了一個編輯,可能會幫你連接 –

1

執行之前的任何其他人SET NAMES 'utf8'查詢。

+0

爲時已晚:-)豎起大拇指給尼古拉斯 –

相關問題