Các hàm PHP chuyển đổi ký tự tiếng Việt từ dạng mã hex ít phổ biến về dạng phổ biến và ngược lại (v1.2)

Bản này tôi cập nhật thêm việc chuyển đổi cả ký tự viết hoa nữa.

Bốn hàm bao gồm:

  • pop_hex_convert($str): chuyển chuỗi tiếng Việt ở dạng mã hóa hex không phổ biến sang dạng phổ biến, chuyển nó thành chuỗi ký tự viết thường. Đầu vào có thể là chuỗi viết hoa, viết thường hay cả hai, đầu ra chỉ bao gồm các ký tự viết thường;
  • rarely_hex_convert($str): chuyển chuỗi tiếng Việt ở dạng mã hóa hex phổ biến về dạng không phổ biến, chuyển nó thành chuỗi ký tự viết thường. Đầu vào có thể là chuỗi viết hoa, viết thường hay cả hai, đầu ra chỉ bao gồm các ký tự viết thường. Nó ngược với hàm pop_hex_convert($str);
  • pop_hex_upp_convert($str): chuyển chuỗi tiếng Việt ở dạng mã hóa hex không phổ biến sang dạng phổ biến, chỉ chuyển các ký tự viết HOA, các ký tự viết thường giữ nguyên mã hex ban đầu của nó;
  • rarely_hex_upp_convert($str): chuyển từ tiếng Việt ở dạng mã hóa hex phổ biến về dạng không phổ biến, chỉ chuyển các ký tự viết HOA. các ký tự viết thường giữ nguyên mã hex ban đầu của nó. Nó ngược với hàm pop_hex_upp_convert($str);

Mấy hàm này tương đối hữu ích khi chúng ta muốn thao tác với từ tiếng Việt được mã hóa theo nhiều kiểu khác nhau. Chuyển về thống nhất một dạng (dù là dạng phổ biến hay không phổ biến) sẽ giúp chúng ta xử lý chính xác hơn.

Một lợi ích khác có thể đáng quan tâm là với 2 hàm rarely_hex_convert($str)rarely_hex_upp_convert($str) kết hợp với hàm bin2hex có sẵn của PHP ta có thể dễ dàng lấy được dấu của từ. Ngoài ra là hàm hex2bin để chuyển ngược mã hex và từ cụ thể.

Các mã hex có dấu: $timbre = array("cc80","cc81","cc83","cc89","cca3"); // các mã hex có dấu

Các function trong file dưới đây là độc lập, nó không cần require đến file .php khác để hoạt động.

<?php
/* 
 * Vietnamese characters hex converter v1.2
 * MIT License
 * Nguyen Duc Anh - freehost.page
 */


function pop_hex_convert($strx) { // chuyển từ mã hóa hex ít phổ biến sang mã hóa phổ biến hơn dành cho ký tự thường
$str2 = trim($strx, ' '); // bỏ khoảng trắng trước và sau chuỗi
$str3 = preg_replace('/\s+/', ' ', $str2); // loại bỏ khoảng trắng thừa trong chuỗi, chỉ giữ lại một khoảng trắng giữa các từ
$str = mb_strtolower($str3,'UTF-8'); // chuyển tất cả thành ký tự thường

$phothong = array();  // tạo mảng chữ cái mã hóa phổ biến
$itdung = array();  //tạo mảng chữ cái mã hóa ít dùng

// Vần y

$phothong[0]='ỵ'; $itdung[0]='ỵ';

// Vần a thường xong

$phothong[1]='á'; $itdung[1]='á'; 

$phothong[2]='à'; $itdung[2]='à';

$phothong[3]='ả'; $itdung[3]='ả';

$phothong[4]='ã'; $itdung[4]='ã';

$phothong[5]='ạ'; $itdung[5]='ạ';

// ///////////////////////////

// Vần ă thường xong

$phothong[6]='ắ'; $itdung[6]='ắ';

$phothong[7]='ằ'; $itdung[7]='ằ';

$phothong[8]='ẳ'; $itdung[8]='ẳ';

$phothong[9]='ẵ'; $itdung[9]='ẵ';

$phothong[10]='ặ'; $itdung[10]='ặ';

/////////////////////////////

// Vần â thường xong

$phothong[11]='ấ'; $itdung[12]='ấ';

$phothong[12]='ầ'; $itdung[11]='ầ';

$phothong[13]='ậ'; $itdung[13]='ậ';

$phothong[14]='ẩ'; $itdung[14]='ẩ';

$phothong[15]='ẫ'; $itdung[15]='ẫ';


/////////////////////

// Vần e thường xong

$phothong[16]='é'; $itdung[16]='é';

$phothong[17]='è'; $itdung[17]='è';

$phothong[18]='ẻ'; $itdung[18]='ẻ';

$phothong[19]='ẽ'; $itdung[19]='ẽ';

$phothong[20]='ẹ'; $itdung[20]='ẹ';


// ////////////////////////

// Vần ê thường xong

$phothong[21]='ế'; $itdung[21]='ế';

$phothong[22]='ề'; $itdung[22]='ề';

$phothong[23]='ể'; $itdung[23]='ể';

$phothong[24]='ễ'; $itdung[24]='ễ';

$phothong[25]='ệ'; $itdung[25]='ệ';


// //////////////////////

// Vần o thường xong

$phothong[26]='ó'; $itdung[26]='ó';

$phothong[27]='ò'; $itdung[27]='ò';

$phothong[28]='ỏ'; $itdung[28]='ỏ';

$phothong[29]='õ'; $itdung[29]='õ';

$phothong[30]='ọ'; $itdung[30]='ọ';

// ////////////////

// Vần ô thường xong

$phothong[31]='ố'; $itdung[31]='ố';

$phothong[32]='ồ'; $itdung[32]='ồ';

$phothong[33]='ổ'; $itdung[33]='ổ';

$phothong[34]='ỗ'; $itdung[34]='ỗ';

$phothong[35]='ộ'; $itdung[35]='ộ';

// //////////////////////

// Vần ơ thường xong

$phothong[36]='ớ'; $itdung[36]='ớ';

$phothong[37]='ờ'; $itdung[37]='ờ';

$phothong[38]='ở'; $itdung[38]='ở';

$phothong[39]='ỡ'; $itdung[39]='ỡ';

$phothong[40]='ợ'; $itdung[40]='ợ';

// ////////////////////

// Vần i thường xong

$phothong[41]='í'; $itdung[41]='í';

$phothong[42]='ì'; $itdung[42]='ì';

$phothong[43]='ỉ'; $itdung[43]='ỉ';

$phothong[44]='ĩ'; $itdung[44]='ĩ';

$phothong[45]='ị'; $itdung[45]='ị';

// // //////////////////

// Vần u thường xong

$phothong[46]='ú'; $itdung[46]='ú';

$phothong[47]='ù'; $itdung[47]='ù';

$phothong[48]='ủ'; $itdung[48]='ủ';

$phothong[49]='ũ'; $itdung[49]='ũ';

$phothong[50]='ụ'; $itdung[50]='ụ';

// ///////////////

// Vần ư thường xong

$phothong[51]='ứ'; $itdung[51]='ứ';

$phothong[52]='ừ'; $itdung[52]='ừ';

$phothong[53]='ử'; $itdung[53]='ử';

$phothong[54]='ữ'; $itdung[54]='ữ';

$phothong[55]='ự'; $itdung[55]='ự';

// ////////////////////

// Vần y thường xong

$phothong[56]='ý'; $itdung[56]='ý';

$phothong[57]='ỳ'; $itdung[57]='ỳ';

$phothong[58]='ỷ'; $itdung[58]='ỷ';

$phothong[59]='ỹ'; $itdung[59]='ỹ';

// ////////////////////

    for ($j=0; $j<60; $j++) { // chạy vòng lặp để chuyển ký tự
        $pattern = '/'.$itdung[$j].'/';
        $str = preg_replace($pattern, $phothong[$j], $str);
    }
        
return $str;
}



////////////////////////////////////////////////////////////////////////////////

/////////////


function rarely_hex_convert($strx) { // chuyển mã hóa phổ biến về dạng không phổ biến, dành cho ký tự thường
$str2 = trim($strx, ' '); // bỏ khoảng trắng trước và sau chuỗi
$str3 = preg_replace('/\s+/', ' ', $str2); // loại bỏ khoảng trắng thừa trong chuỗi
$str = mb_strtolower($str3,'UTF-8'); // chuyển thành ký tự thường

$phothong = array();  // tạo mảng chữ cái mã hóa phổ biến
$itdung = array();  //tạo mảng chữ cái mã hóa ít dùng

// Vần y

$phothong[0]='ỵ'; $itdung[0]='ỵ';

// Vần a thường xong

$phothong[1]='á'; $itdung[1]='á';

$phothong[2]='à'; $itdung[2]='à';

$phothong[3]='ả'; $itdung[3]='ả';

$phothong[4]='ã'; $itdung[4]='ã';

$phothong[5]='ạ'; $itdung[5]='ạ';

// ///////////////////////////

// Vần ă thường xong

$phothong[6]='ắ'; $itdung[6]='ắ';

$phothong[7]='ằ'; $itdung[7]='ằ';

$phothong[8]='ẳ'; $itdung[8]='ẳ';

$phothong[9]='ẵ'; $itdung[9]='ẵ';

$phothong[10]='ặ'; $itdung[10]='ặ';

/////////////////////////////

// Vần â thường xong

$phothong[11]='ấ'; $itdung[12]='ấ';

$phothong[12]='ầ'; $itdung[11]='ầ';

$phothong[13]='ậ'; $itdung[13]='ậ';

$phothong[14]='ẩ'; $itdung[14]='ẩ';

$phothong[15]='ẫ'; $itdung[15]='ẫ';


/////////////////////

// Vần e thường xong

$phothong[16]='é'; $itdung[16]='é';

$phothong[17]='è'; $itdung[17]='è';

$phothong[18]='ẻ'; $itdung[18]='ẻ';

$phothong[19]='ẽ'; $itdung[19]='ẽ';

$phothong[20]='ẹ'; $itdung[20]='ẹ';


// ////////////////////////

// Vần ê thường xong

$phothong[21]='ế'; $itdung[21]='ế';

$phothong[22]='ề'; $itdung[22]='ề';

$phothong[23]='ể'; $itdung[23]='ể';

$phothong[24]='ễ'; $itdung[24]='ễ';

$phothong[25]='ệ'; $itdung[25]='ệ';


// //////////////////////

// Vần o thường xong

$phothong[26]='ó'; $itdung[26]='ó';

$phothong[27]='ò'; $itdung[27]='ò';

$phothong[28]='ỏ'; $itdung[28]='ỏ';

$phothong[29]='õ'; $itdung[29]='õ';

$phothong[30]='ọ'; $itdung[30]='ọ';

// ////////////////

// Vần ô thường xong

$phothong[31]='ố'; $itdung[31]='ố';

$phothong[32]='ồ'; $itdung[32]='ồ';

$phothong[33]='ổ'; $itdung[33]='ổ';

$phothong[34]='ỗ'; $itdung[34]='ỗ';

$phothong[35]='ộ'; $itdung[35]='ộ';

// //////////////////////

// Vần ơ thường xong

$phothong[36]='ớ'; $itdung[36]='ớ';

$phothong[37]='ờ'; $itdung[37]='ờ';

$phothong[38]='ở'; $itdung[38]='ở';

$phothong[39]='ỡ'; $itdung[39]='ỡ';

$phothong[40]='ợ'; $itdung[40]='ợ';

// ////////////////////

// Vần i thường xong

$phothong[41]='í'; $itdung[41]='í';

$phothong[42]='ì'; $itdung[42]='ì';

$phothong[43]='ỉ'; $itdung[43]='ỉ';

$phothong[44]='ĩ'; $itdung[44]='ĩ';

$phothong[45]='ị'; $itdung[45]='ị';

// // //////////////////

// Vần u thường xong

$phothong[46]='ú'; $itdung[46]='ú';

$phothong[47]='ù'; $itdung[47]='ù';

$phothong[48]='ủ'; $itdung[48]='ủ';

$phothong[49]='ũ'; $itdung[49]='ũ';

$phothong[50]='ụ'; $itdung[50]='ụ';

// ///////////////

// Vần ư thường xong

$phothong[51]='ứ'; $itdung[51]='ứ';

$phothong[52]='ừ'; $itdung[52]='ừ';

$phothong[53]='ử'; $itdung[53]='ử';

$phothong[54]='ữ'; $itdung[54]='ữ';

$phothong[55]='ự'; $itdung[55]='ự';

// ////////////////////

// Vần y thường xong

$phothong[56]='ý'; $itdung[56]='ý';

$phothong[57]='ỳ'; $itdung[57]='ỳ';

$phothong[58]='ỷ'; $itdung[58]='ỷ';

$phothong[59]='ỹ'; $itdung[59]='ỹ';

// ////////////////////


    for ($j=0; $j<60; $j++) { // tiến hành chạy vòng lặp để thực hiện chuyển đổi
        $pattern = '/'.$phothong[$j].'/';
        $str = preg_replace($pattern, $itdung[$j], $str);
    }
            
return $str;
}



//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



function pop_hex_upp_convert($strx) { // chuyển từ mã hóa ít phổ biến sang mã hóa phổ biến hơn dành cho từ có ký tự VIẾT HOA

$str2 = trim($strx, ' '); // bỏ khoảng trắng trước và sau chuỗi
$str = preg_replace('/\s+/', ' ', $str2); // loại bỏ khoảng trắng thừa trong chuỗi
    
$phothong = array();  // tạo mảng chữ cái mã hóa phổ biến
$itdung = array();  //tạo mảng chữ cái mã hóa ít dùng

// Vần Y

$phothong[0]='Ỵ'; $itdung[0]='Ỵ';

// Vần A xong

$phothong[1]='Á'; $itdung[1]='Á';

$phothong[2]='À'; $itdung[2]='À';

$phothong[3]='Ả'; $itdung[3]='Ả';

$phothong[4]='Ã'; $itdung[4]='Ã';

$phothong[5]='Ạ'; $itdung[5]='Ạ';

// ///////////////////////////

// /// Vần Ă xong

$phothong[6]='Ắ'; $itdung[6]='Ắ';

$phothong[7]='Ằ'; $itdung[7]='Ằ';

$phothong[8]='Ẳ'; $itdung[8]='Ẳ';

$phothong[9]='Ẵ'; $itdung[9]='Ẵ';

$phothong[10]='Ặ'; $itdung[10]='Ặ';

/////////////////////////////

// Vần  xong

$phothong[11]='Ấ'; $itdung[12]='Ấ';

$phothong[12]='Ầ'; $itdung[11]='Ầ';

$phothong[13]='Ậ'; $itdung[13]='Ậ';

$phothong[14]='Ẩ'; $itdung[14]='Ẩ';

$phothong[15]='Ẫ'; $itdung[15]='Ẫ';


/////////////////////

// Vần E xong

$phothong[16]='É'; $itdung[16]='É';

$phothong[17]='È'; $itdung[17]='È';

$phothong[18]='Ẻ'; $itdung[18]='Ẻ';

$phothong[19]='Ẽ'; $itdung[19]='Ẽ';

$phothong[20]='Ẹ'; $itdung[20]='Ẹ';


// ////////////////////////

// Vần Ê xong

$phothong[21]='Ế'; $itdung[21]='Ế';

$phothong[22]='Ề'; $itdung[22]='Ề';

$phothong[23]='Ể'; $itdung[23]='Ể';

$phothong[24]='Ễ'; $itdung[24]='Ễ';

$phothong[25]='Ệ'; $itdung[25]='Ệ';


// //////////////////////

// Vần O xong

$phothong[26]='Ó'; $itdung[26]='Ó';

$phothong[27]='Ò'; $itdung[27]='Ò';

$phothong[28]='Ỏ'; $itdung[28]='Ỏ';

$phothong[29]='Õ'; $itdung[29]='Õ';

$phothong[30]='Ọ'; $itdung[30]='Ọ';

// ////////////////

// Vần Ô xong

$phothong[31]='Ố'; $itdung[31]='Ố';

$phothong[32]='Ồ'; $itdung[32]='Ồ';

$phothong[33]='Ổ'; $itdung[33]='Ổ';

$phothong[34]='Ỗ'; $itdung[34]='Ỗ';

$phothong[35]='Ộ'; $itdung[35]='Ộ';

// //////////////////////

// Vần Ơ xong

$phothong[36]='Ớ'; $itdung[36]='Ớ';

$phothong[37]='Ờ'; $itdung[37]='Ờ';

$phothong[38]='Ở'; $itdung[38]='Ở';

$phothong[39]='Ỡ'; $itdung[39]='Ỡ';

$phothong[40]='Ợ'; $itdung[40]='Ợ';

// ////////////////////

// Vần I xong

$phothong[41]='Í'; $itdung[41]='Í';

$phothong[42]='Ì'; $itdung[42]='Ì';

$phothong[43]='Ỉ'; $itdung[43]='Ỉ';

$phothong[44]='Ĩ'; $itdung[44]='Ĩ';

$phothong[45]='Ị'; $itdung[45]='Ị';

// // //////////////////

// Vần U xong

$phothong[46]='Ú'; $itdung[46]='Ú';

$phothong[47]='Ù'; $itdung[47]='Ù';

$phothong[48]='Ủ'; $itdung[48]='Ủ';

$phothong[49]='Ũ'; $itdung[49]='Ũ';

$phothong[50]='Ụ'; $itdung[50]='Ụ';

// ///////////////

// // Vần Ư xong

$phothong[51]='Ứ'; $itdung[51]='Ứ';

$phothong[52]='Ừ'; $itdung[52]='Ừ';

$phothong[53]='Ử'; $itdung[53]='Ử';

$phothong[54]='Ữ'; $itdung[54]='Ữ';

$phothong[55]='Ự'; $itdung[55]='Ự';

// ////////////////////

// Vần Y xong

$phothong[56]='Ý'; $itdung[56]='Ý';

$phothong[57]='Ỳ'; $itdung[57]='Ỳ';

$phothong[58]='Ỷ'; $itdung[58]='Ỷ';

$phothong[59]='Ỹ'; $itdung[59]='Ỹ';

///////////////////////

    for ($j=0; $j<60; $j++) { // thực hiện chạy vòng lặp để đổi
        $pattern = '/'.$itdung[$j].'/';
        $str = preg_replace($pattern, $phothong[$j], $str);
    }
        
return $str; // trả kết quả về
}



////////////////////////////////////////////////////////////////////////////////



function rarely_hex_upp_convert($strx) { // chuyển từ mã hóa phổ thông sang ít dùng dành cho từ có ký tự VIẾT HOA

$str2 = trim($strx, ' '); // bỏ khoảng trắng trước và sau chuỗi
$str = preg_replace('/\s+/', ' ', $str2); // loại bỏ khoảng trắng thừa trong chuỗi
    
$phothong = array();  // tạo mảng chữ cái mã hóa phổ biến
$itdung = array();  //tạo mảng chữ cái mã hóa ít dùng

// Vần Y

$phothong[0]='Ỵ'; $itdung[0]='Ỵ';

// Vần A xong

$phothong[1]='Á'; $itdung[1]='Á';

$phothong[2]='À'; $itdung[2]='À';

$phothong[3]='Ả'; $itdung[3]='Ả';

$phothong[4]='Ã'; $itdung[4]='Ã';

$phothong[5]='Ạ'; $itdung[5]='Ạ';

// ///////////////////////////

// /// Vần Ă xong

$phothong[6]='Ắ'; $itdung[6]='Ắ';

$phothong[7]='Ằ'; $itdung[7]='Ằ';

$phothong[8]='Ẳ'; $itdung[8]='Ẳ';

$phothong[9]='Ẵ'; $itdung[9]='Ẵ';

$phothong[10]='Ặ'; $itdung[10]='Ặ';

/////////////////////////////

// Vần  xong

$phothong[11]='Ấ'; $itdung[12]='Ấ';

$phothong[12]='Ầ'; $itdung[11]='Ầ';

$phothong[13]='Ậ'; $itdung[13]='Ậ';

$phothong[14]='Ẩ'; $itdung[14]='Ẩ';

$phothong[15]='Ẫ'; $itdung[15]='Ẫ';


/////////////////////

// Vần E xong

$phothong[16]='É'; $itdung[16]='É';

$phothong[17]='È'; $itdung[17]='È';

$phothong[18]='Ẻ'; $itdung[18]='Ẻ';

$phothong[19]='Ẽ'; $itdung[19]='Ẽ';

$phothong[20]='Ẹ'; $itdung[20]='Ẹ';


// ////////////////////////

// Vần Ê xong

$phothong[21]='Ế'; $itdung[21]='Ế';

$phothong[22]='Ề'; $itdung[22]='Ề';

$phothong[23]='Ể'; $itdung[23]='Ể';

$phothong[24]='Ễ'; $itdung[24]='Ễ';

$phothong[25]='Ệ'; $itdung[25]='Ệ';


// //////////////////////

// Vần O xong

$phothong[26]='Ó'; $itdung[26]='Ó';

$phothong[27]='Ò'; $itdung[27]='Ò';

$phothong[28]='Ỏ'; $itdung[28]='Ỏ';

$phothong[29]='Õ'; $itdung[29]='Õ';

$phothong[30]='Ọ'; $itdung[30]='Ọ';

// ////////////////

// Vần Ô xong

$phothong[31]='Ố'; $itdung[31]='Ố';

$phothong[32]='Ồ'; $itdung[32]='Ồ';

$phothong[33]='Ổ'; $itdung[33]='Ổ';

$phothong[34]='Ỗ'; $itdung[34]='Ỗ';

$phothong[35]='Ộ'; $itdung[35]='Ộ';

// //////////////////////

// Vần Ơ xong

$phothong[36]='Ớ'; $itdung[36]='Ớ';

$phothong[37]='Ờ'; $itdung[37]='Ờ';

$phothong[38]='Ở'; $itdung[38]='Ở';

$phothong[39]='Ỡ'; $itdung[39]='Ỡ';

$phothong[40]='Ợ'; $itdung[40]='Ợ';

// ////////////////////

// Vần I xong

$phothong[41]='Í'; $itdung[41]='Í';

$phothong[42]='Ì'; $itdung[42]='Ì';

$phothong[43]='Ỉ'; $itdung[43]='Ỉ';

$phothong[44]='Ĩ'; $itdung[44]='Ĩ';

$phothong[45]='Ị'; $itdung[45]='Ị';

// // //////////////////

// Vần U xong

$phothong[46]='Ú'; $itdung[46]='Ú';

$phothong[47]='Ù'; $itdung[47]='Ù';

$phothong[48]='Ủ'; $itdung[48]='Ủ';

$phothong[49]='Ũ'; $itdung[49]='Ũ';

$phothong[50]='Ụ'; $itdung[50]='Ụ';

// ///////////////

// Vần Ư xong

$phothong[51]='Ứ'; $itdung[51]='Ứ';

$phothong[52]='Ừ'; $itdung[52]='Ừ';

$phothong[53]='Ử'; $itdung[53]='Ử';

$phothong[54]='Ữ'; $itdung[54]='Ữ';

$phothong[55]='Ự'; $itdung[55]='Ự';

// ////////////////////

// Vần Y xong

$phothong[56]='Ý'; $itdung[56]='Ý';

$phothong[57]='Ỳ'; $itdung[57]='Ỳ';

$phothong[58]='Ỷ'; $itdung[58]='Ỷ';

$phothong[59]='Ỹ'; $itdung[59]='Ỹ';

///////////////////////

    for ($j=0; $j<60; $j++) { // thực hiện chạy vòng lặp để đổi
        $pattern = '/'.$phothong[$j].'/';
        $str = preg_replace($pattern, $itdung[$j], $str);
    }
        
return $str; // trả kết quả về
}

/////////////////////////////////////////////////////////////////////// End code

Ví dụ:

$str = "Nguyễn Đức Ánh";
echo pop_hex_convert($str).': '.bin2hex(pop_hex_convert($str))."<br>";
echo rarely_hex_convert($str).': '.bin2hex(rarely_hex_convert($str))."<br>";
echo pop_hex_upp_convert($str).': '.bin2hex(pop_hex_upp_convert($str))."<br>";
echo rarely_hex_upp_convert($str).': '.bin2hex(rarely_hex_upp_convert($str))."<br>";

Kết quả:

nguyễn đức ánh: 6e677579e1bb856e20c491e1bba96320c3a16e68
nguyễn đức ánh: 6e677579c3aacc836e20c491c6b0cc81632061cc816e68
Nguyễn Đức Ánh: 4e677579e1bb856e20c490e1bba96320c3816e68
Nguyễn Đức Ánh: 4e677579e1bb856e20c490e1bba9632041cc816e68