Thứ bảy, ngày 3 tháng 12 năm 2016

Một số cách chuyển đổi chuỗi có dấu thành không dấu trong rewrite url.

Ngày đăng: 7/3/2011, 20:11:43AM | Lượt xem: 4,283
Hot!

Tôi có đọc rất nhiều bài, các bạn hỏi sau khi đã biết cách rewrite url rằng: bây giờ không muốn viết là /1/Category/index.html mà muốn viết thành /1/Thoi-trang.html thì phải làm như thế nào?

Thật ra, đây cũng chỉ là một thủ thuật nhỏ mà thôi.

Tôi vẫn tiếp tục lấy ví dụ đối với url ở bên trên: http://lichsu.vn/1/Thoi-trang.html, ở đây trong database chúng ta sẽ có bảng Categories(ID, CatName) với giá trị ID = 1, CatName = Thời trang.

Việc còn lại của bạn chỉ là viết một hàm để biến chuỗi ‘Thời trang’ thành ‘Thoi-trang’ mà thôi. Nguyên tắc như sau: gặp các ký tự không dấu thì giữ  nguyên, gặp ký tự có dấu thì replace thành không dấu ví dụ như ‘ờ’ thì replace thành ‘o’, các ký tự đặc biệt như dấu cách (space – cách trắng), hay ngoặc kép, ngoặc đơn thì replace thành dấu '-'.

Có rất nhiều cách để thực hiện điều này, bằng code C#, hay xử lý các Function ngay trong database.

Đây là hàm tôi viết bằng C# (sau khi kết hợp nhiều phương pháp khác nhau), tôi đặt tên là ConvertToUnSign

 

/// <summary>
    /// Hàm chuyển đổi chuỗi có dấu thành không dấu
    /// NhanDT 14/01/2011.
    /// </summary>
    /// <param name="text"></param>
    /// <returns></returns>
    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 thì tôi có sưu tầm được 1 Function của bác 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
       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
       SET @COUNTER = @COUNTER +1
    END
    SET @strInput = replace(@strInput,' ','-')
    RETURN @strInput
END

 Cách gọi ra khi cần convert như sau:

SELECT dbo.fuChuyenCoDauThanhKhongDau (CatName) FROM Categories

Với CatName = ‘Thời trang’ chúng ta sẽ có kết quả là ‘thoi-trang’.

Như vậy đến bước này, chúng ta đã biết thêm cách để chuyển đổi một chuỗi có dấu thành chuỗi không dấu, chỉ cần sử dụng chuỗi này và truyền vào các parameter trong rule, chúng ta sẽ có những 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ỉ có các ID là những chữ số khó hiểu.

 

Đoàn Thành Nhân – http://lichsu.vn

 Chia sẻ qua: 
Hot!
Ý kiến bạn đọc

These items will be permanently deleted and cannot be recovered. Are you sure?

Gallery

image

Maecenas viverra rutrum pulvinar

Maecenas viverra rutrum pulvinar! Aenean vehicula nulla sit amet metus aliquam et malesuada risus aliquet. Vestibulum rhoncus, dolor sit amet venenatis porta, metus purus sagittis nisl, sodales volutpat elit lorem…

Read more

Text Links

Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
Copyright © 2011 - 2012 vietshare.vn by phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.