Chuyển tiếng việt có dấu sang không dấu trong c#, Javascript, PHP và SQL Server
Trong khi lập trình có khi bạn cần lọc dấu chuỗi tiếng việt (Unicode) thành chuỗi không dấu. Ví dụ trong Form đăng nhập hoặc đăng ký thành viên bạn không muốn TenDangNhap có dấu, hoặc các liên kết không dấu, Tôi sẽ giới thiệu các hàm lọc dấu trong C#, javascript và SQL Server.
1. Hàm lọc dấu tiếng việt trong C#.
Cách 1:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
private static readonly string[] VietNamChar = new string[] { "aAeEoOuUiIdDyY", "áàạảãâấầậẩẫăắằặẳẵ", "ÁÀẠẢÃÂẤẦẬẨẪĂẮẰẶẲẴ", "éèẹẻẽêếềệểễ", "ÉÈẸẺẼÊẾỀỆỂỄ", "óòọỏõôốồộổỗơớờợởỡ", "ÓÒỌỎÕÔỐỒỘỔỖƠỚỜỢỞỠ", "úùụủũưứừựửữ", "ÚÙỤỦŨƯỨỪỰỬỮ", "íìịỉĩ", "ÍÌỊỈĨ", "đ", "Đ", "ýỳỵỷỹ", "ÝỲỴỶỸ" }; public static string utf8Convert1(string str) { //Thay thế và lọc dấu từng char for (int i = 1; i < VietNamChar.Length; i++) { for (int j = 0; j < VietNamChar[i].Length; j++) str = str.Replace(VietNamChar[i][j], VietNamChar[0][i - 1]); } return str; } |
Cách dùng utf8Convert1(“Lập trình tiếng việt dtmi.net”) kết quả => Lap trinh tieng viet dtmi.net
Cách 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
public string utf8Convert(string s) { string stFormD = s.Normalize(NormalizationForm.FormD); StringBuilder sb = new StringBuilder(); for (int ich = 0; ich < stFormD.Length; ich++) { System.Globalization.UnicodeCategory uc = System.Globalization.CharUnicodeInfo.GetUnicodeCategory(stFormD[ich]); if (uc != System.Globalization.UnicodeCategory.NonSpacingMark) { sb.Append(stFormD[ich]); } } sb = sb.Replace('Đ', 'D'); sb = sb.Replace('đ', 'd'); return (sb.ToString().Normalize(NormalizationForm.FormD)); } |
Cách 3:
Sử dụng Regex để chuyển đổi
1 2 3 4 5 6 |
public static string utf8Convert3(string s) { Regex regex = new Regex("\\p{IsCombiningDiacriticalMarks}+"); string temp = s.Normalize(NormalizationForm.FormD); return regex.Replace(temp, String.Empty).Replace('\u0111', 'd').Replace('\u0110', 'D'); } |
2. Hàm lọc dấu tiếng việt trong Javascript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function utf8ConvertJavascript(obj) { var str; str = str.toLowerCase(); str = str.replace(/à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ/g, "a"); str = str.replace(/è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ/g, "e"); str = str.replace(/ì|í|ị|ỉ|ĩ/g, "i"); str = str.replace(/ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ/g, "o"); str = str.replace(/ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ/g, "u"); str = str.replace(/ỳ|ý|ỵ|ỷ|ỹ/g, "y"); str = str.replace(/đ/g, "d"); //str= str.replace(/!|@|%|\^|\*|\(|\)|\+|\=|\<|\>|\?|\/|,|\.|\:|\;|\'| |\"|\&|\#|\[|\]|~|$|_/g,"-"); /* tìm và thay thế các kí tự đặc biệt trong chuỗi sang kí tự - */ //str= str.replace(/-+-/g,"-"); //thay thế 2- thành 1- str = str.replace(/^\-+|\-+$/g, ""); return str; } |
3. Hàm lọc dấu tiếng việt trong PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
function utf8ConvertPHP($str) { $str = preg_replace("/(à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ)/", 'a', $str); $str = preg_replace("/(è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ)/", 'e', $str); $str = preg_replace("/(ì|í|ị|ỉ|ĩ)/", 'i', $str); $str = preg_replace("/(ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ)/", 'o', $str); $str = preg_replace("/(ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ)/", 'u', $str); $str = preg_replace("/(ỳ|ý|ỵ|ỷ|ỹ)/", 'y', $str); $str = preg_replace("/(đ)/", 'd', $str); $str = preg_replace("/(À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ)/", 'A', $str); $str = preg_replace("/(È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ)/", 'E', $str); $str = preg_replace("/(Ì|Í|Ị|Ỉ|Ĩ)/", 'I', $str); $str = preg_replace("/(Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ)/", 'O', $str); $str = preg_replace("/(Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ)/", 'U', $str); $str = preg_replace("/(Ỳ|Ý|Ỵ|Ỷ|Ỹ)/", 'Y', $str); $str = preg_replace("/(Đ)/", 'D', $str); //$str = str_replace(" ", "-", str_replace("&*#39;","",$str)); return $str; } |
4. Hàm lọc dấu tiếng việt trong SQL Server
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
CREATE FUNCTION [dbo].[utf8ConvertSQL] ( @strInput NVARCHAR(4000) ) RETURNS NVARCHAR(4000) AS Begin Set @strInput=rtrim(ltrim(lower(@strInput))) IF @strInput IS NULL RETURN @strInput IF @strInput = '' RETURN @strInput Declare @text nvarchar(50), @i int Select @i= PATINDEX('%['+@text+']%',@strInput ) while @i > 0 begin set @strInput = replace(@strInput, substring(@strInput, @i, 1), '') set @i = patindex('%['+@text+']%', @strInput) End Set @strInput =replace(@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' 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 lower(@strInput) End |
Úng dụng của hàm này thường dùng trong những trường hợp sau:
- Tạo URL thân thiện : Hàm chuyển tiếng việt có dấu sang không dấu lập trình C# => Ham-chuyen-tieng-viet-co-dau-sang-khong-dau-lap-trinh-C#
- Tạo Desciption tối ưu bộ tìm kiếm
Chúc các bạn thành công.
Trong khi lập trình có khi bạn cần lọc dấu chuỗi tiếng việt (Unicode) thành chuỗi không dấu. Ví dụ trong Form đăng nhập hoặc đăng ký thành viên bạn không muốn TenDangNhap có dấu, hoặc các liên kết không dấu, Tôi sẽ giới thiệu các hàm lọc dấu...
thành
võ tuấn[email protected]AdministratorCà phê Cà pháo, Trảm gió v.vTutorials Blog