- Hàm convert tiếng việt có dấu thành không dấu
- Xây dựng chuỗi URL thân thiện
- Áp dụng cho diễn đàn Xenforo
Xây dựng hàm chuyển tiếng việt có dấu sang không dấu
Để chuyển tiếng việt có dấu cơ bản ta sẽ sử dụng các hàm xử lý chuỗi trong PHP để tìm và thay thế. Ta sẽ sử dụng hàm str_replace. Cách sử dụng sẽ như sau:
$chuoi = 'XUÂNTHULAB.NÉT'; $mang_kytu_goc = ['Â', 'É']; // Các ký tự tìm để thay thế $mang_kytu_thaythe = ['A', 'E']; // Ký tự sẽ thay thế tương ứng $ketqua = str_replace($mang_kytu_goc, $mang_kytu_thaythe, $chuoi); echo $ketqua; // XUANTHULAB.NET
Để áp dụng cho chuyển đổi tiếng việc có dấu thành không dấu, làm một cách tương tự, tìm kiếm tất cả các ký tự tiếng việt có dấu thay bằng không dấu. Xây dựng hàm đó như sau:
// Hàm chuyển đổi chuỗi tiếng việt có dấu $str, trả về chuỗi không dấu function convert_vn2latin($str) { // Mảng các ký tự tiếng việt không dấu theo mã unicode tổ hợp $tv_unicode_tohop = [ "à","á","ạ","ả","ã","â","ầ","ấ","ậ","ẩ","ẫ","ă", "ằ","ắ","ặ","ẳ","ẵ", "è","é","ẹ","ẻ","ẽ","ê","ề" ,"ế","ệ","ể","ễ", "ì","í","ị","ỉ","ĩ", "ò","ó","ọ","ỏ","õ","ô","ồ","ố","ộ","ổ","ỗ","ơ" ,"ò","ớ","ợ","ở","õ", "ù","ú","ụ","ủ","ũ","ư","ừ","ứ","ự","ử","ữ", "ỳ","ý","ỵ","ỷ","ỹ", "đ", "À","À","Ạ","Ả","Ã","Â","Ầ","Ấ","Ậ","Ẩ","Ẫ","Ă" ,"Ằ","Ắ","Ặ","Ẳ","Ẵ", "È","É","Ẹ","Ẻ","Ẽ","Ê","Ề","Ế","Ệ","Ể","Ễ", "Ì","Í","Ị","Ỉ","Ĩ", "Ò","Ó","Ọ","Ỏ","Õ","Ô","Ồ","Ố","Ộ","Ổ","Ỗ","Ơ" ,"Ờ","Ớ","Ợ","Ở","Ỡ", "Ù","Ú","Ụ","Ủ","Ũ","Ư","Ừ","Ứ","Ự","Ử","Ữ", "Ỳ","Ý","Ỵ","Ỷ","Ỹ", "Đ" ]; // Mảng các ký tự tiếng việt không dấu theo mã unicode dựng sẵn $tv_unicode_dungsan = [ "à","á","ạ","ả","ã","â","ầ","ấ","ậ","ẩ","ẫ","ă","ằ","ắ","ặ","ẳ","ẵ", "è","é","ẹ","ẻ","ẽ","ê","ề","ế","ệ","ể","ễ", "ì","í","ị","ỉ","ĩ", "ò","ó","ọ","ỏ","õ","ô","ồ","ố","ộ","ổ","ỗ","ơ","ờ","ớ","ợ","ở","ỡ", "ù","ú","ụ","ủ","ũ","ư","ừ","ứ","ự","ử","ữ", "ỳ","ý","ỵ","ỷ","ỹ", "đ", "À","Á","Ạ","Ả","Ã","Â","Ầ","Ấ","Ậ","Ẩ","Ẫ","Ă","Ằ","Ắ","Ặ","Ẳ","Ẵ", "È","É","Ẹ","Ẻ","Ẽ","Ê","Ề","Ế","Ệ","Ể","Ễ", "Ì","Í","Ị","Ỉ","Ĩ", "Ò","Ó","Ọ","Ỏ","Õ","Ô","Ồ","Ố","Ộ","Ổ","Ỗ","Ơ","Ờ","Ớ","Ợ","Ở","Ỡ", "Ù","Ú","Ụ","Ủ","Ũ","Ư","Ừ","Ứ","Ự","Ử","Ữ", "Ỳ","Ý","Ỵ","Ỷ","Ỹ", "Đ" ]; // Mảng các ký không dấu sẽ thay thế cho ký tự có dấu $tv_khongdau = [ "a","a","a","a","a","a","a","a","a","a","a" ,"a","a","a","a","a","a", "e","e","e","e","e","e","e","e","e","e","e", "i","i","i","i","i", "o","o","o","o","o","o","o","o","o","o","o","o" ,"o","o","o","o","o", "u","u","u","u","u","u","u","u","u","u","u", "y","y","y","y","y", "d", "A","A","A","A","A","A","A","A","A","A","A","A" ,"A","A","A","A","A", "E","E","E","E","E","E","E","E","E","E","E", "I","I","I","I","I", "O","O","O","O","O","O","O","O","O","O","O","O" ,"O","O","O","O","O", "U","U","U","U","U","U","U","U","U","U","U", "Y","Y","Y","Y","Y", "D" ]; $str = str_replace($tv_unicode_dungsan, $tv_khongdau, $str); $str = str_replace($tv_unicode_tohop, $tv_khongdau, $str); return $str; }
Nếu bạn gọi thử:
echo convert_vn2latin('Xây dựng hàm chuyển tiếng việt có dấu sang không dấu.'); // Kết quả in ra: // Xay dung ham chuyen tieng viet co dau sang khong dau
Xây dựng URL thân thiện từ chuỗi tiếng việt
Ứng dụng PHP của bạn có thể sử dụng tiêu đề bài viết, tên sản phẩm ... để làm URL trên trang, do vậy bạn có thể có nhu cầu tạo ra URL thân thiện: tiếng việt không dấu, khoảng trắng thay bằng -, có thể chuyển đỏi thành chữ thường nếu muốn. Có thể làm như sau:
function UrlNormal($str) { // Chuyển tiếng việt không dấu $str = convert_vn2latin($str); // chuyển sang in thường $str = mb_strtolower($str); // Giữ lại các ký tự chữ a - z và số 0 - 9 còn lại thay bằng - $str = preg_replace('/[^a-z0-9]/', '-', ($str)); $str = preg_replace('/[--]+/', '-', $str); $str = trim($str, '-'); return $str; }
Nếu bạn gọi thử:
echo UrlNormal('Xây dựng hàm chuyển tiếng việt có dấu sang không dấu.'); // Kết quả in ra: // xay-dung-ham-chuyen-tieng-viet-co-dau-sang-khong-dau
Chuỗi in ra bạn có thể dùng làm xây dựng URL thân thiện cho website
Áp dụng tùy chỉnh URL thân thiện cho diễn đàn Xenforo
Trong xenforo có tùy chỉnh URL thân thiện cho SEO, nhưng với các tiêu đề tiếng việt thì nhiều khi vẫn còn các ký tự có dấu.
Hướng dẫn này để chuyển URL tiếng việt không dấu hoàn chỉnh hơn.
Xử lý lấy URL khi render HTML của Xenforo
Trong hệ thống xenforo việc xử lý link nằm trong file: library\XenForo\Link.php
Chúng ta sẽ chỉnh sửa nội dung file này để thay đổi cách lấy URL của Xenforo
Chỉnh sửa XenForo_Link
Trong file Link.php có lớp XenForo_Link. Trong lớp này bạn thêm hàm convert_vn2latin phía trên vào và định nghĩa thêm hàm convert_url_vn:
public static function convert_vn2latin($str) { // Mảng các ký tự tiếng việt không dấu theo mã unicode tổ hợp $tv_unicode_tohop = [ "à","á","ạ","ả","ã","â","ầ","ấ","ậ","ẩ","ẫ","ă", "ằ","ắ","ặ","ẳ","ẵ", "è","é","ẹ","ẻ","ẽ","ê","ề" ,"ế","ệ","ể","ễ", "ì","í","ị","ỉ","ĩ", "ò","ó","ọ","ỏ","õ","ô","ồ","ố","ộ","ổ","ỗ","ơ" ,"ò","ớ","ợ","ở","õ", "ù","ú","ụ","ủ","ũ","ư","ừ","ứ","ự","ử","ữ", "ỳ","ý","ỵ","ỷ","ỹ", "đ", "À","À","Ạ","Ả","Ã","Â","Ầ","Ấ","Ậ","Ẩ","Ẫ","Ă" ,"Ằ","Ắ","Ặ","Ẳ","Ẵ", "È","É","Ẹ","Ẻ","Ẽ","Ê","Ề","Ế","Ệ","Ể","Ễ", "Ì","Í","Ị","Ỉ","Ĩ", "Ò","Ó","Ọ","Ỏ","Õ","Ô","Ồ","Ố","Ộ","Ổ","Ỗ","Ơ" ,"Ờ","Ớ","Ợ","Ở","Ỡ", "Ù","Ú","Ụ","Ủ","Ũ","Ư","Ừ","Ứ","Ự","Ử","Ữ", "Ỳ","Ý","Ỵ","Ỷ","Ỹ", "Đ" ]; // Mảng các ký tự tiếng việt không dấu theo mã unicode dựng sẵn $tv_unicode_dungsan = [ "à","á","ạ","ả","ã","â","ầ","ấ","ậ","ẩ","ẫ","ă","ằ","ắ","ặ","ẳ","ẵ", "è","é","ẹ","ẻ","ẽ","ê","ề","ế","ệ","ể","ễ", "ì","í","ị","ỉ","ĩ", "ò","ó","ọ","ỏ","õ","ô","ồ","ố","ộ","ổ","ỗ","ơ","ờ","ớ","ợ","ở","ỡ", "ù","ú","ụ","ủ","ũ","ư","ừ","ứ","ự","ử","ữ", "ỳ","ý","ỵ","ỷ","ỹ", "đ", "À","Á","Ạ","Ả","Ã","Â","Ầ","Ấ","Ậ","Ẩ","Ẫ","Ă","Ằ","Ắ","Ặ","Ẳ","Ẵ", "È","É","Ẹ","Ẻ","Ẽ","Ê","Ề","Ế","Ệ","Ể","Ễ", "Ì","Í","Ị","Ỉ","Ĩ", "Ò","Ó","Ọ","Ỏ","Õ","Ô","Ồ","Ố","Ộ","Ổ","Ỗ","Ơ","Ờ","Ớ","Ợ","Ở","Ỡ", "Ù","Ú","Ụ","Ủ","Ũ","Ư","Ừ","Ứ","Ự","Ử","Ữ", "Ỳ","Ý","Ỵ","Ỷ","Ỹ", "Đ" ]; // Mảng các ký không dấu sẽ thay thế cho ký tự có dấu $tv_khongdau = [ "a","a","a","a","a","a","a","a","a","a","a" ,"a","a","a","a","a","a", "e","e","e","e","e","e","e","e","e","e","e", "i","i","i","i","i", "o","o","o","o","o","o","o","o","o","o","o","o" ,"o","o","o","o","o", "u","u","u","u","u","u","u","u","u","u","u", "y","y","y","y","y", "d", "A","A","A","A","A","A","A","A","A","A","A","A" ,"A","A","A","A","A", "E","E","E","E","E","E","E","E","E","E","E", "I","I","I","I","I", "O","O","O","O","O","O","O","O","O","O","O","O" ,"O","O","O","O","O", "U","U","U","U","U","U","U","U","U","U","U", "Y","Y","Y","Y","Y", "D" ]; $str = str_replace($tv_unicode_dungsan, $tv_khongdau, $str); $str = str_replace($tv_unicode_tohop, $tv_khongdau, $str); return $str; } // biến tham chiếu $title public static function convert_url_vn($title) { $title = convert_vn2latin($title); $title = strtr($title, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz'); return $title; }
Bước cuối cùng bạn tìm đến hàm getTitleForUrl
, và thay dòng
$title = strtr($title, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');
Bằng đoạn mã sau:
$title = self::convert_url_vn($title);
Kiểm tra lại URL của XenForo. Chúc bạn thành công!
Có vấn đề gì các bạn cứ comment nhé.