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ì.

Viết một bình luận