Hàm PHP sửa các lỗi hiển thị ký tự kỳ lạ trong tiếng Việt

Đôi khi bạn sẽ thấy các ký tự kỳ lạ hiển thị như thế này trong văn bản tiếng Việt:

“á”,”à“,”ả”,”ã”,”ạ”,”ă”,”ắ”,”ằ”,”ẳ”,”ẵ”,”ặ”,”â”,”ấ”,”ầ”,”ẩ”,”ẫ”,”ậ”,”é”,”è”,”ẻ”,”ẽ”,”ẹ”,”ê”,”ế”,”ề”,”ể”,”á»…”,”ệ”,”ó”,”ò”,”ỏ”,”õ”,”ọ”,”ô”,”ố”,”ồ”,”ổ”,”á»—”,”á»™”,”Æ¡”,”ờ”,”á»›”,”ở”,”ỡ”,”ợ”,”ú”,”ù”,”ủ”,”Å©”,”ụ”,”Æ°”,”ứ”,”ừ”,”á»­”,”ữ”,”á»±”,”ý”,”ỳ”,”á»·”,”ỹ”,”ỵ”,”í”,”ì”,”ỉ”,”Ä©”,”ị”,”Ä‘”

“Á”,”À”,”Ả”,”Ô,”Ạ“,”Ä‚”,”Ắ”,”Ằ”,”Ẳ”,”Ẵ”,”Ặ”,””,”Ấ”,”Ầ”,”Ẩ”,”Ẫ”,”Ậ”,”É”,”È”,”Ẻ”,”Ẽ”,”Ẹ”,”Ê”,”Ế”,”Ề”,”Ể”,”Ễ”,”Ệ”,”Ó”,”Ò”,”Ỏ”,”Õ”,”Ọ”,”Ô”,”Ố”,”á»’”,”á»””,”á»–”,”Ộ”,”Æ “,”Ờ”,”Ớ”,”Ở”,”á» “,”Ợ”,”Ú”,”Ù”,”Ủ”,”Ũ”,”Ụ”,”Ư”,”Ứ”,”Ừ”,”Ử”,”á»®”,”á»°”,”Ý”,”Ỳ”,”Ỷ”,”Ỹ”,”á»´”,”Í”,”Ì”,”Ỉ”,”Ĩ”,”Ị”,”Đ”

Ví dụ dưới đây là 25 câu đầu trong truyện Kiều:

Trăm năm trong cõi người ta,
Chữ tài chữ mệnh khéo là ghét nhau.
Trải qua má»™t cuá»™c bể dâu,
Những Ä‘iều trông thấy mà Ä‘au Ä‘á»›n lòng.

Lạ gì bỉ sắc tÆ° phong,
Trời xanh quen thói má hồng Ä‘ánh ghen.
Cảo thÆ¡m lần giở trÆ°á»›c Ä‘èn,
Phong tình cổ lục còn truyền sá»­ xanh.
Rằng năm Gia Tĩnh triều Minh,

Bốn phương phẳng lặng, hai kinh vững vàng.
Có nhà viên ngoại họ VÆ°Æ¡ng,
Gia tư nghĩ cũng thường thường bực trung.
Má»™t trai con thứ rốt lòng,
VÆ°Æ¡ng Quan là chữ, nối dòng nho gia.

Đầu lòng hai ả tố nga,
Thúy Kiều là chị, em là Thúy Vân.
Mai cốt cách, tuyết tinh thần,
Má»—i người má»™t vẻ, mười phân vẹn mười.
Vân xem trang trọng khác vời,

Khuôn trăng đầy đặn, nét ngài nở nang.
Hoa cười ngọc thốt đoan trang,
Mây thua nÆ°á»›c tóc, tuyết nhường màu da.
Kiều càng sắc sảo, mặn mà,
So bề tài, sắc, lại là phần hơn.

Làn thu thủy, nét xuân sÆ¡n,
Hoa ghen thua thắm, liá»…u hờn kém xanh.
Má»™t, hai nghiêng nÆ°á»›c nghiêng thành,
Sắc đành Ä‘òi má»™t, tài đành họa hai.
Thông minh vốn sẵn tÆ° trời,

Nó có thể xuất hiện khi bạn đọc một tài liệu nào đó, hoặc trong dữ liệu ứng dụng của chính bạn.

Hiện tôi cũng chỉ biết lỗi này liên quan đến vấn đề mã hóa, chứ không rõ nguyên nhân sâu xa tại sao nó lại bị như vậy. Tuy nhiên trong bài viết này tôi vẫn có cách để bạn có thể khắc phục vấn đề, và hiển thị chính xác thông tin tiếng Việt của nội dung.

Bạn có thể dùng hàm dưới đây để chuyển các mã lỗi về mã chuẩn:

function fix_vietnamese_font($str) {
$lowercase_err_char = array("á","à ","ả","ã","ạ","ă","ắ","ằ","ẳ","ẵ","ặ","â","ấ","ầ","ẩ","ẫ","ậ","é","è","ẻ","ẽ","ẹ","ê","ế","ề","ể","á»…","ệ","ó","ò","ỏ","õ","ọ","ô","ố","ồ","ổ","á»—","á»™","Æ¡","ờ","á»›","ở","ỡ","ợ","ú","ù","ủ","Å©","ụ","Æ°","ứ","ừ","á»­","ữ","á»±","ý","ỳ","á»·","ỹ","ỵ","ì","ỉ","Ä©","ị","Ä‘","í");

$lowercase_normal_char = array("á","à","ả","ã","ạ","ă","ắ","ằ","ẳ","ẵ","ặ","â","ấ","ầ","ẩ","ẫ","ậ","é","è","ẻ","ẽ","ẹ","ê","ế","ề","ể","ễ","ệ","ó","ò","ỏ","õ","ọ","ô","ố","ồ","ổ","ỗ","ộ","ơ","ờ","ớ","ở","ỡ","ợ","ú","ù","ủ","ũ","ụ","ư","ứ","ừ","ử","ữ","ự","ý","ỳ","ỷ","ỹ","ỵ","ì","ỉ","ĩ","ị","đ","í");

$uppercase_err_char = array("Á","À","Ả","Ã","Ạ","Ä‚","Ắ","Ằ","Ẳ","Ẵ","Ặ","Â","Ấ","Ầ","Ẩ","Ẫ","Ậ","É","È","Ẻ","Ẽ","Ẹ","Ê","Ế","Ề","Ể","Ễ","Ệ","Ó","Ò","Ỏ","Õ","Ọ","Ô","Ố","á»’","á»”","á»–","Ộ","Æ ","Ờ","Ớ","Ở","á» ","Ợ","Ú","Ù","Ủ","Ũ","Ụ","Ư","Ứ","Ừ","Ử","á»®","á»°","Ý","Ỳ","Ỷ","Ỹ","á»´","Í","Ì","Ỉ","Ĩ","Ị","Đ");

$uppercase_normal_char = array("Á","À","Ả","Ã","Ạ","Ă","Ắ","Ằ","Ẳ","Ẵ","Ặ","Â","Ấ","Ầ","Ẩ","Ẫ","Ậ","É","È","Ẻ","Ẽ","Ẹ","Ê","Ế","Ề","Ể","Ễ","Ệ","Ó","Ò","Ỏ","Õ","Ọ","Ô","Ố","Ồ","Ổ","Ỗ","Ộ","Ơ","Ờ","Ớ","Ở","Ỡ","Ợ","Ú","Ù","Ủ","Ũ","Ụ","Ư","Ứ","Ừ","Ử","Ữ","Ự","Ý","Ỳ","Ỷ","Ỹ","Ỵ","Í","Ì","Ỉ","Ĩ","Ị","Đ");

$err_char = array_merge($lowercase_err_char, $uppercase_err_char);
$normal_char = array_merge($lowercase_normal_char, $uppercase_normal_char);

$num = count($err_char);

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

return $str;
}

Việc chuyển thành công không phải lúc nào cũng đạt 100% các ký tự, nhưng thường là trên 95% và đủ để chúng ta hiểu chính xác văn bản muốn nói gì.