PHP: Tạo SEO friendly URL

Chào mọi người,

Hiện tại em đang phát triển một ứng dụng CMS trong đó cần có chức năng tạo URL để xem bài viết (sau khi liệt kê danh sách các bài viết). Theo thiết kế cơ sở dữ liệu thì em thấy có hai cách làm được việc này:

  • Dựa trên ID của bài viết
  • Tạo một đường dẫn URL dựa trên chính tiêu đề bài viết

Cách thứ nhất thì khá đơn giản nhưng URL sẽ không thân thiện với các search engine nên em quyết định chuyển sang triển khai thực hiện cách thứ hai. Trong cách này thì nếu như tiêu đề bài viết không có dấu thì thực hiện khá đơn giản như sau:


$url = string_replace(" ", "-", $title);

Tuy nhiên với các bài viết có dấu thì URL trên lại không thân thiện với search engine. Các bác cho em hỏi có cách nào để loại bỏ dấu tiếng việt của các chữ cái để được URL không có dấu không?
Được hỏi 1 năm trước
Bình chọn bởi: Trần Anh, Phuong Jenny, Minh Phạm, Hoang Anh, Ngô Thanh Hải, Khoi Tran, Vũ Nhật Linh, Trung Quân, Ánh Linh, Thu Thủy, Giang River, Hiệp Bùi, Trung Võ, Nguyen Duy, Đức Tuấn, Thành Công, Trần Hoan, Hoàng Tùng, Thu Hang, Nam Nguyễn

Bạn có thể sử dụng hàm generateURL() như sau (chú ý cách sử dụng hàm preg_replace thay vì str_replace trong hàm này để tìm và thay thế theo pattern):

function generateURL ($str) {
    $charMap = array(
        // In thường
        "a" => "á|à|ả|ã|ạ|ă|ắ|ặ|ằ|ẳ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ",
        "d" => "đ",
        "e" => "é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ",
        "i" => "í|ì|ỉ|ĩ|ị",
        "o" => "ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ",
        "u" => "ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự",
        "y" => "ý|ỳ|ỷ|ỹ|ỵ",
        // In hoa
        "A" => "Á|À|Ả|Ã|Ạ|Ă|Ắ|Ặ|Ằ|Ẳ|Ẵ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ",
        "D" => "Đ",
        "E" => "É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ",
        "I" => "Í|Ì|Ỉ|Ĩ|Ị",
        "O" => "Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ",
        "U" => "Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự",
        "Y" => "Ý|Ỳ|Ỷ|Ỹ|Ỵ",
    );

    foreach($charMap as $replace => $search){
        $str = preg_replace("/($search)/i", $replace, $str);
    }
    return str_replace(" ", "-", $str);
}
Trả lời 2 ngày trước

Thêm Trả Lời