การแสดงภาษาไทยได้อย่างถูกต้อง ด้วย CodeIgniter + Oracle + Adodb
การแสดงภาษาไทยได้อย่างถูกต้อง ด้วย CodeIgniter + Oracle + Adodb
ผมต่อยอดจาก http://www.narisa.com/forums/index.php?showtopic=22780
นะครับ ยกเครดิตให้ของ totti
* ก่อนจะอ่าน
1. ผมขอบอกก่อนเลยนะครับว่าจะให้ภาษาออกแนวบ้านๆ หน่อยนะครับ
2. ผมจะไม่พูดเรื่อง setup Oracle นะครับ
3. แก้ไข NLS_LANG = AMERICAN_AMERICA.TH8TISASCII
4. ไม่พูดถึงวิธีการใช้งาน Adodb นะครับ
เริ่มเลย
1. โหลด Adodb แล้ว copy ทั้งยวงเลยไปไว้ที่
2. สร้างไฟล์ adodb_loader.php ไว้ที่
Code ตามนี้ครับ เป็นการเรียกใช้งาน adodb ที่เราโหลดมา
3. เพิ่ม adodb_loader ใน autoload.php
4. กำหนดค่าการติดต่อ oracle ใน database.php ให้ตรงกับ server เรานะครับ
5. เรียกใช้ adodb ใน CodeIgniter ก็ใช้ตามนี้นะครับ(ตัวอย่างนะครับ)
6. ส่วนหน้า php หรือ html ที่เรียกใช้ CodeIgniter เพื่อให้แสดงผลได้อย่างถูกต้องก็เพิ่มหัวดังนี้นะครับ
อาจะห้วนไปหน่อยเอาเป็นว่าหากมีเวลาผมจะขยายความอีกทีนะครับหรือไม่หากงงตรงส่วนไหนถามมาได้นะครับจะหมั่นเข้ามาตอบ
ps. กว่าจะหาวิธีได้ 2 อาทิตย์ สุดๆๆ อะ
ผมต่อยอดจาก http://www.narisa.com/forums/index.php?showtopic=22780
นะครับ ยกเครดิตให้ของ totti
* ก่อนจะอ่าน
1. ผมขอบอกก่อนเลยนะครับว่าจะให้ภาษาออกแนวบ้านๆ หน่อยนะครับ
2. ผมจะไม่พูดเรื่อง setup Oracle นะครับ
3. แก้ไข NLS_LANG = AMERICAN_AMERICA.TH8TISASCII
4. ไม่พูดถึงวิธีการใช้งาน Adodb นะครับ
เริ่มเลย
1. โหลด Adodb แล้ว copy ทั้งยวงเลยไปไว้ที่
WEB_DIR/application/libraries
2. สร้างไฟล์ adodb_loader.php ไว้ที่
WEB_DIR/application/libraries
Code ตามนี้ครับ เป็นการเรียกใช้งาน adodb ที่เราโหลดมา
if (!defined('BASEPATH')) exit('No direct script access allowed');
class Adodb_loader {
var $dbh;
function Adodb_loader($params=null)
{
// check if adodb already loaded
if (!class_exists('ADONewConnection'))
{
require_once(APPPATH.'libraries/adodb5/adodb.inc'.EXT);
}
// database handler's name, defaults to 'adodb'
$dbh = (isset($params['name'])) ? $params['name'] : 'adodb';
// the db settings group from the database.php config
$db_group = (isset($params['group'])) ? $params['group'] : '';
$this->_init_adodb_library($dbh,$db_group);
}
function _init_adodb_library($dbh,$db_group)
{
// get CI instance
$CI =& get_instance();
// get database config
include(APPPATH.'config/database'.EXT);
// check which database group settings to use
// default to database setting default
$db_group = (!empty($db_group)) ? $db_group : $active_group;
$cfg = $db[$db_group];
// check that driver is set
if (isset($cfg['dbdriver']))
{
$CI->$dbh =& ADONewConnection($cfg['dbdriver']);
// set debug
//$CI->$dbh->debug = $cfg['db_debug']; // หากต้องการจะ debug
$CI->$dbh->charSet = $cfg['char_set'];// สำคัญมากตรงนี้เลยครับจะไปอ่าน charset ที่เรากำหนดไว้ที่ database.php
// check for persistent connection
if ($cfg['pconnect'])
{
// persistent
$CI->$dbh->PConnect($cfg['hostname'],$cfg['username'],$cfg['password'],$cfg['database']) or die("can't do it: " . $CI->$dbh->ErrorMsg());
}
else
{
// normal
$CI->$dbh->Connect($cfg['hostname'],$cfg['username'],$cfg['password'],$cfg['database']) or die("can't do it: " . $CI->$dbh->ErrorMsg());
}
// use associated array as default format
//$CI->$dbh->Execute("ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'");
$CI->$dbh->SetFetchMode(ADODB_FETCH_ASSOC);
}
else
{
die("database settings not set");
}
}
public function __destructor() {
$CI->$dbh->Close();
}
}
3. เพิ่ม adodb_loader ใน autoload.php
$autoload['libraries'] = array('adodb_loader');
4. กำหนดค่าการติดต่อ oracle ใน database.php ให้ตรงกับ server เรานะครับ
$db['default']['hostname'] = "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DatabaseServer)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME =SERVICENAMEDatabaseServer)))"; $db['default']['username'] = "USERNAME"; $db['default']['password'] = "PASSWORD"; $db['default']['database'] = ""; // not used by this Oracle driver $db['default']['dbdriver'] = "oci8"; // ใช้ oci8 ของ adodb ในการเชื่อมต่อ $db['default']['dbprefix'] = ''; $db['default']['pconnect'] = TRUE; $db['default']['db_debug'] = TRUE; $db['default']['cache_on'] = FALSE; $db['default']['cachedir'] = ''; $db['default']['char_set'] = 'AL32UTF8'; // ตั้งให้ตรงกับ NLS_LANG ของ Oracle $db['default']['dbcollat'] = 'AL32UTF8'; $db['default']['swap_pre'] = ''; $db['default']['autoinit'] = TRUE; $db['default']['stricton'] = FALSE;
5. เรียกใช้ adodb ใน CodeIgniter ก็ใช้ตามนี้นะครับ(ตัวอย่างนะครับ)
$CI =& get_instance();
$results = $CI->adodb->Execute("select * from users);
while (!$results->EOF) {
$data_arr[] = array(
'id' => $results->fields['ID'],
'username' => $results->fields['USERNAME'],
'real_name' => $results->fields['REAL_NAME'],
'email' => $results->fields['EMAIL'],
'group_id' => $results->fields['GROUP_ID'],
'group_name' => $results->fields['NAME']
);
$results->MoveNext();
}
6. ส่วนหน้า php หรือ html ที่เรียกใช้ CodeIgniter เพื่อให้แสดงผลได้อย่างถูกต้องก็เพิ่มหัวดังนี้นะครับ
<meta equiv="Content-Type" content="text/html; charset=<?php echo config_item('charset');>">
อาจะห้วนไปหน่อยเอาเป็นว่าหากมีเวลาผมจะขยายความอีกทีนะครับหรือไม่หากงงตรงส่วนไหนถามมาได้นะครับจะหมั่นเข้ามาตอบ
ps. กว่าจะหาวิธีได้ 2 อาทิตย์ สุดๆๆ อะ
Comments