จัดการภาษาไทย (UTF-8) ด้วย Multibyte String Functions

UTF-8 ใช้พื้นที่ 3 ไบต์ ในการเก็บข้อมูลภาษาไทย 1 อักขระ  ดังนั้นจึงไม่สามารถใช้ฟังก์ชัน เช่น strlen() และ substr() กับภาษาไทยที่เป็น UTF-8 ได้ เช่น

$string = "ที่นี่abcd1234";
echo 'strlen() return: '.strlen($string);
ผลลัพธ์ที่ได้คือ
strlen() return: 26

ตัวเลข 26 มาจาก ภาษาไทย 6×3 = 18, ภาษาอังกฤษ 4 และตัวเลข 4 ตัว

ดังนั้นเพื่อให้นับจำนวนตัวอักขระได้อย่างถูกต้องจะต้องใช้ฟังก์ชัน multibyte  string  เช่น จากตัวอย่างข้างต้น จะต้องใช้ฟังก์ชัน mb_strlen() แทน strlen()

Continue reading จัดการภาษาไทย (UTF-8) ด้วย Multibyte String Functions

กลับไปหน้าที่แล้ว

วิธีการที่จะทำให้ script กลับไปหน้าที่แล้วหลังจากทำงานเสร็จคือใช้ $_SERVER[‘HTTP_REFERER’] ครับ

<?php

// Somethint here

// Redirect back to previous page
$previous = $_SERVER['HTTP_REFERER'];
header("location:$previous");
exit;
?>

ภาษาไทยกับ PHP และ MySQL

UTF-8 เป็นคำตอบสุดท้่าย เพื่อให้การใช้ภาษาไทยกับ PHP และ MySQL ใช้งานได้อย่างสมบูรณ์

การสร้างฐานข้อมูลใน MySQL

ให้ตั้งค่าดังต่อไปนี้

  • Default CHARSET = utf8
  • COLLATE = utf8_unicode_ci

ตัวอย่างเช่น

CREATE TABLE brand (
pk_brand int(5) NOT NULL auto_increment,
brand varchar(250) collate utf8_unicode_ci NOT NULL,
brand_logo varchar(200) collate utf8_unicode_ci NOT NULL,
website varchar(200) collate utf8_unicode_ci default NULL,
PRIMARY KEY  (pk_brand)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

แล้วทำไมจึงไม่ใช้ utf8_general_ci?  อ่านได้ที่นี่

การเชื่อมต่อจาก PHP ไปยัง MySQL

หลังจากที่เชื่อมต่อกับฐานข้อมูลแล้วให้ส่ง query ต่อไปนี้ด้วย (ทำแค่ครั้งเดียว)

  • set NAMES utf8

ขอให้สังเกตว่า ใช้ utf8  ไม่ใช่  utf-8  ตัวอย่างเช่น

<?php
// Database connection for abstract
$dsn = 'mysql://username:password@localhost/database';
$mdb2 =& MDB2::factory($dsn);
if (PEAR::isError($mdb2)) {
    die ($mdb2->getMessage());
}
// set fetchmode
$mdb2->setFetchMode(MDB2_FETCHMODE_ASSOC);
$mdb2->query('set NAMES utf8');
?>

การเขียน META TAG ใน HTML Code

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>hello!</title>
</head>

🙂

วิธีการเรียก Smarty library แบบง่าย

ผมบังเิอิญไปเจอวิธีการที่จะเรียก Smarty library ที่น่าสนใจ  สะดวกมากเวลาที่กำลังพัฒนาโปรแกรม เพราะไม่ต้องระบุ path เลย แต่เมื่อพัฒนาโปรแกรมเสร็จแล้วก็ควรแก้ไข path ให้ถูกต้องครับ

<?php
// SMARTY Section
define('SMARTY_DIR',str_replace("\","/",getcwd()).'/Smarty-2.6.19/libs/');
require_once(SMARTY_DIR . 'Smarty.class.php');
$smarty = new Smarty();
$smarty->template_dir = str_replace("\","/",getcwd()).'/templates/';
$smarty->compile_dir  = str_replace("\","/",getcwd()).'/templates_c/';
$smarty->config_dir   = str_replace("\","/",getcwd()).'/configs/';
$smarty->cache_dir    = str_replace("\","/",getcwd()).'/cache/';
//** un-comment the following line to show the debug console
//$smarty->debugging = true;
?>

PEAR::Auth package

PEAR  มีแพ็คเกจที่ชื่อว่า  Auth  ซึ่งช่วยอำนวยความสะดวกในการสร้างระบบตรวจสอบสิทธิ์ผู้ใช้ (authentication) โดยช่วยอำนวยความสะดวกตั้งแต่ การเพิ่มและลบผู้ใช้ การล็อกอิน การนำข้อมูลผู้ใช้มาแสดง การกำหนดระยะเวลาการล็อกอินและ Idle timeout และการตรวจสอบสิทธิ์ผู้ใช้งาน  ทำให้ช่วยลดเวลาในการพัฒนาโปรแกรมลงได้มาก 

สิ่งที่สำคัญคือ Auth รองรับระบบจัดเก็บข้อมูลของผู้ใช้หลากหลายประเภท ได้แก่

  • All databases supported by the PEAR database layer
  • All databases supported by the MDB database layer
  • All databases supported by the MDB2 database layer
  • Plaintext files
  • LDAP servers
  • POP3 servers
  • IMAP servers
  • vpopmail accounts (Using either PECL vpopmail or PEAR Net_Vpopmaild)
  • RADIUS
  • SAMBA password files
  • SOAP (Using either PEAR SOAP package or PHP5 SOAP extension)
  • PEAR website
  • Kerberos V servers
  • SAP servers

PHP mod_rewrite and .htaccess tutorials

ผมเคยใช้งาน mod_rewrite กับ .htaccess นานมาแล้ว จนลืมไปหมด วันนี้ก็บังเอิญไปเจอเว็บที่น่าสนในเกี่ยวกับเรื่องนี้ครับ

Widexl.com – Module Rewrite URL Rewriting Guide
Corz.org more .htaccess tips and tricks..

Apache Mod_Rewrite URL Rewriting Engine documentation
 URL Rewriting Guide

PHP : Parsing Email Adresses in PHP

นี่เป็น PHP script ที่ใช้สำหรับตรวจสอบรูปแบบของอีเมลที่ผู้ใช้ป้อนผ่านฟอร์ม ว่าต้องเป็นไปตาม RFC822

http://www.iamcal.com/publish/articles/php/parsing_email/

เขียนอธิบายอย่างละเอียดครับ ลองแวะเข้าไปอ่านดู

ฟังก์ชันอะไรบ้างของ php ที่ควรระงับการใช้งาน

คำแนะนำจาก http://www.netadmintools.com/art411.html

disable_functions = “dl, phpinfo, shell_exec, passthru, exec, popen, system,
proc_get_status,proc_nice,proc_open,proc_terminate,proc_close”

ส่วนเว็บโฮสติ้งที่ผมใช้อยู่เค้า ยกเลิกฟังก์ชันต่อไปนี้

disable_functions = “system, shell_exec, proc_terminate, proc_open, proc_nice, proc_getstatus, proc_close, passthru, exec, escapeshellcmd, escapeshellarg”

แก้ใน php.ini (เลือกเอาตามใจชอบครับ)

How to Compile suPHP+Apache2+PHP

คัดลอกจาก http://planetmy.com/blog/?p=67

Finally I’m manage to make my PHP 5.1.2 compiled with suPHP successful today suPHP is a tool for executing PHP scripts with the permissions of their owners. It consists of an Apache module (mod_suphp) and a setuid root binary (suphp) that is called by the Apache module to change the uid of the process executing the PHP interpreter.

I just would like to share about “How’s To Compile PHP + suPHP + Apache” as below:

Continue reading How to Compile suPHP+Apache2+PHP