แสดงบทความที่มีป้ายกำกับ utf8 แสดงบทความทั้งหมด
แสดงบทความที่มีป้ายกำกับ utf8 แสดงบทความทั้งหมด

วันศุกร์ที่ 7 มกราคม พ.ศ. 2554

ใช้งาน cookie บน javascript กับภาษาไทย

เผอิญได้โจทย์มาว่าใน contact form user นั้นควรกรอกแค่ครั้งเดียว ครั้งต่อไปเข้ามาหน้า contact ก็ไม่ควรต้องกรอกอีก ซึ่งผู้ที่จะกรอกนั้นจะเป็น anonymous ดังนั้นวิธีการที่จะทำให้หน้า contact จำค่าได้ก็คงต้องใช้ cookie

ปัญหาคือหน้า contact form นั้นอยู่ใน drupal ซึ่งเมื่อเปิด page cache แล้วมันจะทำให้ใช้งาน cookie สำหรับ anonymous ไม่ได้ ดังนั้นเลยต้องเลี่ยงไปใช้ cookie ของ javascript แทน

จาก tutorial http://www.w3schools.com/JS/js_cookies.asp ก็ดูเหมือนจะทำงานได้ดีแต่พอเรานำไปใช้จริงและกรอกค่าใน form เป็นภาษาไทย ผลลัพธ์ก็คือ ภาษาไทยเละ ดังนั้นเราจึงต้อง customize code กันนิดหน่อยเพื่อให้ใช้งานภาษาไทยได้

original code

function getCookie(c_name) {
  if (document.cookie.length > 0) {
    c_start = document.cookie.indexOf(c_name + "=");
    if (c_start != -1) {
      c_start = c_start + c_name.length+1;
      c_end = document.cookie.indexOf(";", c_start);
      if (c_end == -1) 
        c_end = document.cookie.length
      return unescape(document.cookie.substring(c_start,c_end));
    }
  }
  return "";
}

function setCookie(c_name, value,expiredays) {
  var exdate = new Date();
  exdate.setDate(exdate.getDate()+expiredays);
  document.cookie = c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
}

customized code

function getCookie(c_name) {
  if (document.cookie.length > 0) {
    c_start = document.cookie.indexOf(c_name + "=");
    if (c_start != -1) {
      c_start = c_start + c_name.length+1;
      c_end = document.cookie.indexOf(";", c_start);
      if (c_end == -1) 
        c_end = document.cookie.length
      return decodeURIComponent(document.cookie.substring(c_start,c_end));
    }
  }
  return "";
}

function setCookie(c_name, value,expiredays) {
  var exdate = new Date();
  exdate.setDate(exdate.getDate()+expiredays);
  document.cookie = c_name+ "=" +encodeURIComponent(value)+((expiredays==null) ? "" : ";expires="+exdate.toUTCString());
}

เพื่อให้ใช้งานภาษาไทยได้ ต้องใช้ function encodeURIComponent แทน function escape แต่ปัญหายังไม่หมดแค่นี้ เมื่อเรา getCookie ที่ภายใน text นั้นมี space เข้ามาใช้งาน space ที่เคยพิมพ์เข้าไปจะกลายเป็นเครื่องหมาย + แทน ดังนั้นเราต้อง replace มันก่อนที่จะนำไปใช้งานด้วย

getCookie('c_name').replace(/\+/g, " ")

ซึ่ง /\+/ นั้นหมายถึงเครื่องหมาย + และ g หมายถึงให้ replace ทั้ง string
Continue Reading...

วันพฤหัสบดีที่ 23 ธันวาคม พ.ศ. 2553

วิธีการ restore database ที่มี character encoding utf-8

เนื่องจากเวลา restore database ด้วย MySQL command โดยที่ไฟล์ sql ของเรานั้นมีภาษาไทยอยู่ และไฟล์ดังกล่าวมี encoding เป็น utf-8 การใช้ command ปกติจะทำให้เวลา restore เข้าไปภาษาไทยจะเละ

ดังนั้นเวลาเรา restore เราควรจะต้องกำหนด default character set ให้กับ command ด้วย
mysql -u [username] -p --default_character_set utf8 [database_name] < [file.sql]
mysql -u root -p --default_character_set utf8 leknarm < leknarm.sql
Continue Reading...

วันจันทร์ที่ 1 มีนาคม พ.ศ. 2553

ปัญหา fgetcsv กับ php

เนื่องจากได้เขียน php โดยอ่านไฟล์จากไฟล์ csv ซึ่งมีข้อความภาษาไทยอยู่ โดยเมื่อทดสอบบนเครื่องตัวเองนั้นไม่มีปัญหาใดๆ ทั้งสิ้นแต่เมื่อ deploy ขึ้นไปบน server ดันเกิดปัญหาขึ้นโดย ภาษาไทยนั้นไม่แสดงผล

จากที่ลอง research ดูก็ไล่ไปเรื่อยๆ ตั้งแต่ check ว่าเปิดไฟล์ได้ไหม echo ภาษาไทยได้ไหม และก็มาเจอประเด็นที่ fgetcsv

จากที่อ่านใน http://php.net/manual/en/function.fgetcsv.php ซึ่งมีเขียนไว้ว่า

Note: Locale setting is taken into account by this function. If LANG is e.g. en_US.UTF-8, files in one-byte encoding are read wrong by this function.

แสดงว่าเราต้องทำการ set locale ให้กับ apache การแสดงผลจึงจะถูกต้องโดยใช้คำสั่ง

setlocale ( LC_ALL, 'en_US.UTF-8' );

แค่นี้ก้จะทำให้การ get csv ที่มีภาษาไทยภายในไฟล์แสดงผลได้ถูกต้องแล้วครับ
Continue Reading...

วันเสาร์ที่ 16 มกราคม พ.ศ. 2553

set ค่า mysql ให้ใช้งาน utf8

โดยปกติแล้ว default character ของ mysql นั้นจะไม่ใช่ utf8 ทำให้ค่าที่ input ที่เป็นภาษาไทยมีค่าเป็น ??? ดังนั้นเราต้องมาตั้งค่า config ของ mysql ให้เป็น utf8 โดยการ

ใช้ text editor ที่ถนัดเปิด /etc/mysql/my.cnf จากนั้นไปที่ส่วนของ [client] แล้วหาบรรทัดว่างๆ เพิ่มคำว่า

default-character-set=utf8



จากนั้นทำเหมือนกันที่ส่วนของ [mysqld]
เมื่อแก้ไขไฟล์เสร็จเรียบร้อยแล้ว ทำการ restart mysql แล้วทดลอง input ค่าเป็นภาษาไทยดู จะเห็นว่าไม่เป็น ??? แล้ว
Continue Reading...

Blogroll

About