2013-03-22 52 views
3

我有São Tomé and Príncipe存儲在MySQL數據庫中。如何正確顯示存儲在MySQL數據庫中的非可重寫字符

它顯示我的網頁爲S�o Tom� and Pr�ncipe

上有反正從數據庫中正確地直顯示呢?

我的MySQL類型爲MyISAM和整理是utf8_general_ci

我的網頁的charset <meta charset="utf-8">

字段類型設置爲varchar(30)和現場的排序規則是一樣的表utf8_general_ci

PHP功能測試

utf8_decode()銜接泰德字符S?o Tom? and Pr?ncipe htmlspecialchars_decode()轉換的字符S�o Tom� and Pr�ncipe html_entity_decode()轉換的字符到S�o Tom� and Pr�ncipe quoted_printable_decode()轉換的字符到S�o Tom� and Pr�ncipe htmlentities()返回空白結果

得到它的工作得益於@SAEVEN

然在此之前我的權利查詢選擇

mysqli_query($GLOBALS['db_link'], "SET NAMES 'utf8'");

+1

什麼是您的編碼類型設置爲? – 2013-03-22 02:20:34

+1

另請參見[絕對最小每個軟件開發人員絕對,肯定必須知道Unicode和字符集](http://www.joelonsoftware.com/articles/Unicode.html) – mario 2013-03-22 02:21:41

+0

請參閱我的修訂問題@Fred – 2013-03-22 02:23:39

回答

2

難道你需要在連接級別指定你的命名空間整理嗎?

我假設你已經介紹了基本知識,你已經在HTML標記中使用utf8作爲字符集。

嘗試執行這條SQL語句,你做任何你的數據庫的查詢之前:

'SET NAMES UTF8'

例如,如果您正在使用PDO

// do your regular connection logic whatever it is 
$dbc = new PDO(....); 
$dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

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

// run your queries beneath 
.... 

或者可以使用速記

new PDO(
    'mysql:host=mysql.example.com;dbname=awesome_db', 
    "username", 
    "password", 
    array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8") 
); 

無論您使用哪種DBAL,該查詢都可以工作。只需在拉動數據前使用相同的連接來運行它(只需要進行一次)

+0

謝謝@saeven - 你幫我解決了我的問題。我用我使用的解決方案修改了我的問題(我程序化地編碼) – 2013-03-22 03:09:09

+0

很高興我能提供幫助。常見的問題,可能是相當晦澀的,除非你把頭撞在牆上。 ;)感謝您的投票! – Saeven 2013-03-22 03:10:25

+0

感謝您的幫助... – 2013-03-22 03:11:06

相關問題