PDA

View Full Version : Cách tìm kiếm có dâu, không dấu, chữ hoa, chữ thường



gia_cat_luong
02-08-2010, 10:47
Xin chào mọi người,
Mình đang gặp rắc rối ở chỗ tìm kiếm, mình chỉ dùng "LIKE" để tìm kiếm bình thường thôi, nhưng giờ mình muốn khi nhập vào ô tìm kiếm nó tìm tất cả những chuỗi có dấu, không dấu, chữ hoa và chữ thường ra luôn, không biết có cách nào làm được như vậy không, nhờ các bác chỉ giáo.

thuyduongcd
02-08-2010, 11:24
Viết 1 hàm lọc hết dấu tiếng Việt. Kết hợp hàm LCASE() của MySQL và strtolower() của PHP.


$st=strtolower($st);
$chuoikodau=ham_loc_dau($st);
$sql="SELECT * FROM table WHERE LCASE(field) LIKE '%$st%' OR field LIKE '%chuoikodau%'";

honnhienh
02-08-2010, 11:32
ham_loc_dau($st);
hàm lọc dấu quan trong nhất bác lại khong cho. hic

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

$khongdau=array("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","_");
return str_replace($codau,$khongdau,$st);
}

jdkhang
03-08-2010, 11:30
Xin chào mọi người,
Mình đang gặp rắc rối ở chỗ tìm kiếm, mình chỉ dùng "LIKE" để tìm kiếm bình thường thôi, nhưng giờ mình muốn khi nhập vào ô tìm kiếm nó tìm tất cả những chuỗi có dấu, không dấu, chữ hoa và chữ thường ra luôn, không biết có cách nào làm được như vậy không, nhờ các bác chỉ giáo.

Bạn set Collation trong CSDL là gì vậy?

Mình làm CSDL hay đặt Collation là utf8_general_ci thì tìm kiếm tiếng Việt bình thường mà.

Keyword mình giữ nguyên, không dùng các hàm kiểu như ham_loc_dau(),...

Dù mình nhập keyword là tiếng việt có dấu hay không dấu thì kết quả trả về nếu có đều là: Kết quả tiếng việt có dấu, không dấu, chữ hoa, chữ thường đều ra hết. Chỉ bị mỗi trường hợp keyword có ký tự đầu tiên là "đ" thì không ra, lúc này mình chỉ xử lý ngoại lệ trường hợp ký tự đầu tiên là "đ" thôi.

haicop
05-08-2010, 12:02
Dùng PHP tạo 1 table đã gọt hết dấu, chỉ phục vụ cho việc tìm kiếm. Mình làm cách đó mới khác phục đc.

honnhienh
05-08-2010, 14:14
cách bac jdkhang có lỗi chứ "đ" chưa tưng thử nay mwois biết cám ơn bác cái lỗi này.

@haicop bác nói ró hơn chút được hog . thank bác trước