2012-04-19 192 views
2

您好我正在閱讀一個字符串編寫希臘語從一個編碼「ISO-8859-7」在一個PHP腳本運行在cmd與意圖在mysql數據庫中添加它的一部分。問題是,我添加任何東西到數據庫我回聲,似乎有一個編碼問題。我附上了相關的代碼部分。Php編碼與希臘

$fil1=hitFormGet("http://www.topsites.gr/gr_domain_list/".$site->href); 
$fil1=iconv("ISO-8859-7","UTF-8",$fil1); 
$html1=str_get_html($fil1); 
$data=$html1->find('td class="res3" table tbody table tbody tr'); 
echo "ttl".$data[4]->plaintext."\n"; 

和輸出 TTLÎ|ιλοξÎμνÎμί網站:二±I

(看起來不同這裏太...)

+1

在呈現的頁面,有你設置好的了正確的字符編碼(utf-8)? – F21 2012-04-19 03:13:54

+0

Nop我不知道如何... – Evan 2012-04-19 03:28:26

+1

要確定它的頁面的字符編碼是否確實存在問題,請右鍵單擊頁面並將字符編碼更改爲utf-8。如果它顯示正常,然後讓PHP發送字符集標題爲utf-8:'ini_set('default_charset','UTF-8');' – F21 2012-04-19 03:33:38

回答

3

使用UTF-8時處理PHP和MySQL。下面是我如何連接:

$DB_USERNAME = ''; 
$DB_PASSWORD = ''; 
$DB_HOST = ''; 
$DB_NAME = ''; 

$pdo_attributes = array(); 
$pdo_attributes[PDO::ATTR_EMULATE_PREPARES] = FALSE; 

$dsn = sprintf('mysql:dbname=%s;host=%s;charset=utf8', $DB_NAME, $DB_HOST); 
$pdo = new PDO($dsn, $DB_USERNAME, $DB_PASSWORD, $pdo_attributes); 

此外,在PHP 5.3.6 <這組附加屬性:

$pdo_attributes[1002] = 'SET NAMES utf8'; 

的整數1002代表PDO :: MYSQL_ATTR_INIT_COMMAND,但該命令在PHP <破5.3.1。

查看下面這個答覆的原始內容,現在已經過時。這是使用舊mysql_*功能,是連接方式不建議任何更多的,與有必要在當時其他一些亂碼預防提示:

mysql_connect ("localhost", "DB_USER", "DB_PASSWORD") or die (mysql_error()); 
mysql_select_db ("DATABASE_NAME") or die (mysql_error()); 

mysql_query("SET character_set_client=utf8"); 
mysql_query("SET character_set_connection=utf8"); 
mysql_query("SET character_set_database=utf8"); 
mysql_query("SET character_set_results=utf8"); 
mysql_query("SET character_set_server=utf8"); 
mysql_query("SET NAMES 'utf8'"); 
+0

Thnx這是非常有幫助的。 – Evan 2012-04-19 04:26:25

+0

謝謝你剛剛度過我的一天! – 2015-01-22 14:55:41

+0

@MurtazaAshraf:我很高興它有幫助,但是你真的不應該再使用'mysql_ *'函數。我剛剛更新了PDO的答案,請改用它! – dotancohen 2015-01-22 15:43:09