Hướng dẫn is utf8 encoded php? - utf8 có được mã hóa php không?

Hướng dẫn is utf8 encoded php? - utf8 có được mã hóa php không?

Nội dung chính ShowShow

  • PHP và mã hóa UTF-8
  • Ở header:
  • Trong file XML:
  • Trong HTML:
  • Chỉ định UTF-8 trong hàm hmlspecialchars:
  • Khi kết nối với MySQL:
  • Sử dụng hàm xử lý chuỗi tương thích với UTF-8:
  • MySQL với mã hóa UTF-8
  • Thay đổi trong file config my.ini:
  • Chuyển đổi dữ liệu sử dụng mã hóa latin1 sang UTF-8
  • Lời kết

Đã đăng vào thg 12 2, 2017 6:45 CH 7 phút đọc 7 phút đọc

Đối với một lập trình viên PHP hay MySQL, mọi thứ có vẻ khá dễ dàng và thoải mái khi làm việc với dữ liệu chỉ gồm các ký tự tiếng Anh. Cho đến khi bạn vướng vào sự rắc rối của mã hóa UTF-8 trong xử lý ngôn ngữ không phải tiếng Anh. Nói sơ lược về mã hóa UTF-8 thì đây là một kiểu mã hóa ký tự của tập ký tự Unicode. Nó được thiết kế để tương thích ngược với mã hóa ASCII và tránh những nhược điểm của UTF-16 và UTF-32. UTF-8 trở thành kiểu mã hóa phổ biến và chiếm ưu thế khi hơn một nửa số trang web hiện tại sử dụng kiểu mã hóa này. Trong bài viết này, sẽ có 3 hướng dẫn chính được trình bày để có thể sử dụng mã hóa UTF-8 trong PHP và MySQL:

  • Thay đổi trong file config php.ini và PHP code.
  • Thay đổi trong file config my.ini và những vấn đề liên quan khác đến MySQL.
  • Thay đổi dữ liệu trong CSDL MySQL sử dụng mã hóa latin1 thành mã hóa UTF-8.

PHP và mã hóa UTF-8

Để sử dụng UTF-8 là kiểu mã hóa ký tự mặc định, thay đổi ở file config php.ini như sau: default_charset = "utf-8"; Thay đổi trong PHP code:

Ở header:

Trong file XML:

Trong file XML:

Trong HTML:

 function utf8_for_xml($string)
  {
    return preg_replace('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u',
                        ' ', $string);
  }

Trong HTML:

  • Chỉ định UTF-8 trong hàm hmlspecialchars:
  • Khi kết nối với MySQL:

Chỉ định UTF-8 trong hàm hmlspecialchars:

 $link = mysql_connect('localhost', 'user', 'password');
 mysql_set_charset('utf8', $link);
4

Khi kết nối với MySQL:

Sử dụng hàm xử lý chuỗi tương thích với UTF-8:

 $link = mysql_connect('localhost', 'user', 'password');
 mysql_set_charset('utf8', $link);

MySQL với mã hóa UTF-8

$mysqli = new mysqli("localhost", "my_user", "my_password", "test");
    
  /* check connection */
  if (mysqli_connect_errno()) {
      printf("Connect failed: %s\n", mysqli_connect_error());
      exit();
  }
    
  /* change character set to utf8 */
  if (!$mysqli->set_charset("utf8")) {
      printf("Error loading character set utf8: %s\n", $mysqli->error);
  } else {
      printf("Current character set: %s\n", $mysqli->character_set_name());
  }
    
  $mysqli->close();

Sử dụng hàm xử lý chuỗi tương thích với UTF-8:

MySQL với mã hóa UTF-8

  1. Thay đổi trong file config my.ini:
  2. Chuyển đổi dữ liệu sử dụng mã hóa latin1 sang UTF-8

MySQL với mã hóa UTF-8

Thay đổi trong file config my.ini:

 [client]
  default-character-set=UTF-8
    
  [mysql]
  default-character-set=UTF-8
    
  [mysqld]
  character-set-client-handshake = false #force encoding to uft8
  character-set-server=UTF-8
  collation-server=UTF-8_general_ci
    
  [mysqld_safe]
  default-character-set=UTF-8
  • Chuyển đổi dữ liệu sử dụng mã hóa latin1 sang UTF-8
  • Lời kết
  • Đã đăng vào thg 12 2, 2017 6:45 CH 7 phút đọc

Chuyển đổi dữ liệu sử dụng mã hóa latin1 sang UTF-8

  1. Lời kết
  2. Đã đăng vào thg 12 2, 2017 6:45 CH 7 phút đọc
  3. Đối với một lập trình viên PHP hay MySQL, mọi thứ có vẻ khá dễ dàng và thoải mái khi làm việc với dữ liệu chỉ gồm các ký tự tiếng Anh. Cho đến khi bạn vướng vào sự rắc rối của mã hóa UTF-8 trong xử lý ngôn ngữ không phải tiếng Anh. Nói sơ lược về mã hóa UTF-8 thì đây là một kiểu mã hóa ký tự của tập ký tự Unicode. Nó được thiết kế để tương thích ngược với mã hóa ASCII và tránh những nhược điểm của UTF-16 và UTF-32. UTF-8 trở thành kiểu mã hóa phổ biến và chiếm ưu thế khi hơn một nửa số trang web hiện tại sử dụng kiểu mã hóa này. Trong bài viết này, sẽ có 3 hướng dẫn chính được trình bày để có thể sử dụng mã hóa UTF-8 trong PHP và MySQL:
  4. Thay đổi trong file config php.ini và PHP code.
  5. Thay đổi trong file config my.ini và những vấn đề liên quan khác đến MySQL.
  6. Thay đổi dữ liệu trong CSDL MySQL sử dụng mã hóa latin1 thành mã hóa UTF-8.
  7. Để sử dụng UTF-8 là kiểu mã hóa ký tự mặc định, thay đổi ở file config php.ini như sau: default_charset = "utf-8"; Thay đổi trong PHP code:
  •  $link = mysql_connect('localhost', 'user', 'password');
     mysql_set_charset('utf8', $link);
    
    0
  •  $link = mysql_connect('localhost', 'user', 'password');
     mysql_set_charset('utf8', $link);
    
    1 Tuy nhiên, không phải tất cả ký tự UTF-8 đều được chấp nhận ở trong XML, vì vậy cần loại bỏ những ký tự này. Một hàm hữu dụng sau đây có thể giải quyết vấn đề trên:
 create table temptable (
        select * from MY_TABLE where
        LENGTH(MY_FIELD) != CHAR_LENGTH(MY_FIELD));
  • HTML content:
     $link = mysql_connect('localhost', 'user', 'password');
     mysql_set_charset('utf8', $link);
    
    2
alter table temptable modify temptable.ArtistName blob;
alter table temptable modify temptable.ArtistName varchar(128) character set UTF-8;
  • HTML form:
     $link = mysql_connect('localhost', 'user', 'password');
     mysql_set_charset('utf8', $link);
    
    3
  • Thay thế dữ liệu vào bảng chính
     [client]
      default-character-set=UTF-8
        
      [mysql]
      default-character-set=UTF-8
        
      [mysqld]
      character-set-client-handshake = false #force encoding to uft8
      character-set-server=UTF-8
      collation-server=UTF-8_general_ci
        
      [mysqld_safe]
      default-character-set=UTF-8
    
    6
  1. Kiểm tra dữ liệu còn lại, nếu cần thì thực hiện lại từ bước 7.

Lời kết

Mã hóa dữ liệu đòi hỏi sự cẩn trọng và tỉ mỉ. Nếu hiểu rõ về nó, lập trình viên có thể tiết kiệm một khoảng thời gian và công sức đáng kể khi đối mặt với những vấn đề về dữ liệu. Bài viết này như một lần nữa khẳng định tầm quan trọng của việc cân nhắc khi định nghĩa charset trong dự án cũng như môi trường phát triển ngay từ ban đầu.

Referrence: https://www.toptal.com/php/a-utf-8-primer-for-php-and-mysql

All rights reserved