Trung tâm hỗ trợ

Một số phương pháp chuyển đổi chuỗi có dấu thành không dấu trong URL Rewrite

Một số phương pháp chuyển đổi chuỗi có dấu thành không dấu trong URL Rewrite

 

Tôi đã xem qua nhiều bài viết và nhận thấy nhiều bạn hỏi rằng: Sau khi đã biết cách Rewrite URL, làm thế nào để chuyển từ /1/Category/index.html thành /1/Thoi-trang.html?

 

Thực tế thì đây chỉ là một thủ thuật nhỏ.

Hãy tiếp tục với ví dụ URL: http://lichsu.vn/1/Thoi-trang.html. 

Trong cơ sở dữ liệu của chúng ta, sẽ có một bảng Categories với các cột ID và CatName, chứa giá trị ID = 1 và CatName = Thời trang.

 

Nhiệm vụ của bạn là viết một hàm để chuyển chuỗi ‘Thời trang’ thành ‘Thoi-trang’. Nguyên tắc là: Giữ nguyên các ký tự không dấu, thay thế ký tự có dấu bằng ký tự không dấu tương ứng, ví dụ như ‘ờ’ thành ‘o’. Các ký tự đặc biệt như dấu cách, dấu ngoặc kép, hoặc dấu ngoặc đơn sẽ được thay thế bằng dấu ‘-’.

 

Có nhiều cách để thực hiện điều này, bao gồm viết Code C# hoặc xử lý bằng các hàm (Function) ngay trong cơ sở dữ liệu (Database).

 

Dưới đây là hàm tôi viết bằng C# (kết hợp từ nhiều phương pháp khác nhau), tôi gọi nó là ConvertToUnSign:

/// 

 

    /// Hàm chuyển đổi chuỗi có dấu thành không dấu

 

    /// NhanDT 14/01/2011.

 

    /// 

 

    /// 

 

    /// 

 

    public static string ConvertToUnSign(string text)

 

    {

 

        for (int i = 32; i < 48; i++)

 

        {

 

            text = text.Replace(((char)i).ToString(), " ");

 

        }

 

        text = text.Replace(".", "-");

 

        text = text.Replace(" ", "-");

 

        text = text.Replace(",", "-");

 

        text = text.Replace(";", "-");

 

        text = text.Replace(":", "-");

 

 

 

        Regex regex = new Regex(@"p{IsCombiningDiacriticalMarks}+");

 

 

 

        string strFormD = text.Normalize(System.Text.NormalizationForm.FormD);

 

  return regex.Replace(strFormD, String.Empty).Replace('u0111','d').Replace('u0110', 'D');

 

    }

 

 

Nếu muốn xử lý trong Database, tôi có sưu tầm được một Function của Admin trong HMWeb.com.vn

 

CREATE FUNCTION [dbo].[fuChuyenCoDauThanhKhongDau]

(

      @strInput NVARCHAR(4000)

)

RETURNS NVARCHAR(4000)

AS

BEGIN    

    IF @strInput IS NULL RETURN @strInput

    IF @strInput = '' RETURN @strInput

    DECLARE @RT NVARCHAR(4000)

    DECLARE @SIGN_CHARS NCHAR(136)

    DECLARE @UNSIGN_CHARS NCHAR (136)

 

 

    SET @SIGN_CHARS = N'ăâđêôơưàảãạáằẳẵặắầẩẫậấèẻẽẹéềểễệế

 

                  ìỉĩịíòỏõọóồổỗộốờởỡợớùủũụúừửữựứỳỷỹỵý

 

                  ĂÂĐÊÔƠƯÀẢÃẠÁẰẲẴẶẮẦẨẪẬẤÈẺẼẸÉỀỂỄỆẾÌỈĨỊÍ

 

                  ÒỎÕỌÓỒỔỖỘỐỜỞỠỢỚÙỦŨỤÚỪỬỮỰỨỲỶỸỴÝ'

 

                  +NCHAR(272)+ NCHAR(208)

 

    SET @UNSIGN_CHARS = N'aadeoouaaaaaaaaaaaaaaaeeeeeeeeee

 

                  iiiiiooooooooooooooouuuuuuuuuuyyyyy

 

                  AADEOOUAAAAAAAAAAAAAAAEEEEEEEEEEIIIII

 

                  OOOOOOOOOOOOOOOUUUUUUUUUUYYYYYDD'



    DECLARE @COUNTER int

 

    DECLARE @COUNTER1 int

 

    SET @COUNTER = 1



    WHILE (@COUNTER <=LEN(@strInput))

 

    BEGIN  

 

      SET @COUNTER1 = 1

 

      --Tìm trong chuỗi mẫu

 

       WHILE (@COUNTER1 <=LEN(@SIGN_CHARS)+1)

 

       BEGIN

 

     IF UNICODE(SUBSTRING(@SIGN_CHARS, @COUNTER1,1))

 

            = UNICODE(SUBSTRING(@strInput,@COUNTER ,1) )

 

     BEGIN          

 

          IF @COUNTER=1

 

              SET @strInput = SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1)

 

              + SUBSTRING(@strInput, @COUNTER+1,LEN(@strInput)-1)                  

 

          ELSE

 

              SET @strInput = SUBSTRING(@strInput, 1, @COUNTER-1)

 

              +SUBSTRING(@UNSIGN_CHARS, @COUNTER1,1)

 

              + SUBSTRING(@strInput, @COUNTER+1,LEN(@strInput)- @COUNTER)

 

              BREAK

 

               END

 

             SET @COUNTER1 = @COUNTER1 +1

 

       END

 

      --Tìm tiếp

 

       SET @COUNTER = @COUNTER +1

 

    END

 

    SET @strInput = replace(@strInput,' ','-')

 

    RETURN @strInput

 

END

 

Cách sử dụng hàm Convert khi cần thiết:

Bạn có thể gọi hàm chuyển đổi trong SQL như sau:

SELECT dbo.fuChuyenCoDauThanhKhongDau (CatName) FROM Categories

Với giá trị CatName = 'Thời trang', chúng ta sẽ nhận được kết quả là 'thoi-trang'.

 

Như vậy, đến bước này, chúng ta đã nắm rõ cách chuyển đổi chuỗi có dấu thành chuỗi không dấu. Khi sử dụng chuỗi đã được chuyển đổi này và truyền vào các Parameter trong Rule, chúng ta sẽ tạo ra các liên kết thân thiện với người dùng hơn rất nhiều so với các Query chỉ chứa các ID là các chữ số khó hiểu.

 

 

 

Hơn +10,000 doanh nghiệp và chủ shop đang bán hàng như thế nào ?
Bạn mong muốn có một website thương hiệu phù hợp với lĩnh vực hoạt động doanh nghiệp. Hãy liên hệ với chúng tôi, mọi mong muốn của bạn sẽ được lắng nghe.Chúng tôi mong muốn nhận thông tin yêu cầu của quý khách hàng qua đường dây nóng 0938 91 96 05 để chúng tôi có thể tư vấn một cách tốt nhất.
IMS luôn sẵn sàng phục vụ quý khách hàng 24/7, mọi thắc mắc xin hãy gọi điện với chúng tôi qua số hotline 0938 91 96 05 để được tư vấn trực tiếp Liên hệ báo giá