Hướng dẫn dùng utf-8 characters trong PHP

Khi chuyển database MySQL từ phiên bản 3.x lên 4.1 trở đi bạn sẽ gặp vấn đề với mã font Unicode, để khắc phục tình trạng này bạn có thể làm theo hướng dẫn sau:

1. Import database vào MySQL 4.1 – 5.0.x:
Khi import file database là dạng mã unicode [File sql của bạn phải chắc chắn là định dạng unicode utf8] vào MySQL 4.1 trở lên trước tiên bạn vào phpMyAdmin tạo database với Collation của Charset là định dạng utf8 chẳng hạn chọn utf8_general_ci sau đó click Create như hình sau:
htmlentities[].

UTF-8 ở trên hệ điều hành

Hiện nay PHP có thể chạy ở hầu hết các hệ điều hành, gồm cả Linux và Windows. Nhưng cách PHP xử lý tên file ở mỗi hệ điều hành là có thể khác nhau, trong đó, hỗ trợ Linux tốt nhất. Chẳng hạn trên Windows, nếu dùng PHP tạo một file với mã non-ASCII, lỗi có thể xuất hiện. Trên Linux và OSX, bạn có thể mã hóa tên file dạng UTF-8, nhưng trên Windows, buộc phải dùng chuẩn ISO-8859-1.

UTF-8 khi mần ăn với MySQ 

Lưu ý 1: Để chắc chắn là chuỗi trên PHP sang MYSQL lưu ở định dạng UTF-8, hãy thiết lập character và collation là utf8bm4 [theo kinh nghiệm của mình có khả năng hiển thị các kí tự "lạ" nhiều hơn UTF8 thông thường, chẳng hạn có lần mình làm về phiên âm tiếng Anh thì chỉ khi thiết lập utf8bm4, hệ thống mới hiển thị được].

Lưu ý 2: Phải thiết lập trong kết nối với mysql khi viết bằng PHP. Giờ thì chắc là toàn dân xài PDO nên mình có thể thiết lập như sau:


$db
= new PDO['dblib:host=your_hostname;dbname=your_db;charset=UTF-8', $user, $pass];


Với PHP 5.3.6, tùy chọn charset chưa có nên có thể thực hiện theo tùy chọn sau:


$pdo = new PDO[
    'mysql:host=hostname;dbname=defaultDbName',
    'username',
    'password',
    array[PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"]
];

Với mysqli, ta buộc phải thiết lập như sau:

$conn = mysqli_connect['localhost','db_username','password','your_database_name'];
 mysqli_set_charset[$conn,"utf8"]; 

UTF-8 trên trình duyệt

Để chắc chắn là PHP sẽ xuất UTF-8, có thể dùng hàm mb_http_output[]. Trên trình duyệt thì ta thường thiết lập  tùy chọn meta charset như sau, đặt trong thẻ
  

//phpbestpractices.org/#utf-8

//stackoverflow.com/questions/4475548/pdo-mysql-and-broken-utf-8-encoding

Chủ Đề