วันอังคารที่ 7 ธันวาคม พ.ศ. 2553

การแก้ปัญหาภาษาไทยใน CakePHP

:D มีหลายจุดด้วยกันครับ เดี๋ยวจะค่อยๆ รวบรวมมาให้ได้ครบๆ
1. App.encoding
ถ้าเราตั้งไฟล์ทั้งหมดให้เป็น tis-620 หรือไม่ได้ใช้ utf-8 เราจะต้องเปลี่ยนจาก 'UTF-8' เป็น 'ISO-8859-1' ครับ เหตุผลที่ไม่เปลี่ยนเป็น TIS-620 ก็เพราะว่า php ยังไม่สนับสนุน character set TIS-620 ครับ อย่างไรก็ตามสามารถใช้ ISO-8859-1 แทนได้ เพราะว่าทั้งสองแบบนี้มีรูปแบบการจัดเก็บเป็น ANSI เหมือนกัน ใช้แทนกันได้ไม่มีปัญหาครับ

ไฟล์ config/core.php

/**
* Application wide charset encoding
*/
Configure::write('App.encoding', 'ISO-8859-1');

2. database config สำหรับตรงนี้ต้องขอบคุณคุณ ErrorMan ครับ :)

var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'username',
'password' => 'password',
'database' => 'database_name',
'prefix' => '',
'encoding' => 'TIS620' //ถ้าใช้ utf-8 ให้เปลี่ยนเป็น UTF8 แทนครับ :)
);

3. การใช้ ajax ใน cakephp

<?php
class DoraemonsController extends AppController {

var $name = 'Doraemons';
var $helpers = array('Html', 'Form','Ajax','Javascript');
var $components = array('RequestHandler');

function beforeFilter(){
parent::beforeFilter();
//จะต้องตั้ง debug < 2
Configure::write('debug',1);
if ($this->RequestHandler->isAjax()){
//เทียบได้กับ header('content-type:text/html;charset=tis-620');
//การใช้ respondAs จะต้องเรียกใช้ใน beforeFilter
//เพราะ respondAs จะถูกเรียกโดยอัตโนมัติโดย
//CakePHP ภายหลังคำสั่ง beforeFilter
//ถ้าเราเรียกใช้ respondAs ซ้ำ, CakePHP จะถือว่าเป็นโมฆะ
$this->RequestHandler->respondAs('html',array(
'charset'=>'tis-620'
));
}
}

function index(){
}
}
?>

ไม่มีความคิดเห็น:

แสดงความคิดเห็น