10/10/2018, 10:27
Đoạn code tự động lọc bỏ bài viết viết bằng tiếng Việt không dấu?
Trên diễn đàn có quy định phải viết bằng tiếng Việt có dấu, tuy nhiên có khá nhiều bài viết vẫn sử dụng tiếng Việt không dấu. Không biết có ai có cách nào (đoạn code hoặc ý tưởng) để tự động lọc bỏ các bài viết viết bằng tiếng Việt không dấu hay không?
Có khả thi hay không nếu dùng phương pháp lọc từng chữ và so mã để tìm xem có các chữ như "á", "à", "ả", "ạ", "ê", "ể",...? Đầu tiên là liệt kê hết tất cả các trường hợp nguyên âm dùng trong tiếng Việt và rồi so sánh để tìm. Nếu không có chữ nào thì xóa bỏ?
Có khả thi hay không nếu dùng phương pháp lọc từng chữ và so mã để tìm xem có các chữ như "á", "à", "ả", "ạ", "ê", "ể",...? Đầu tiên là liệt kê hết tất cả các trường hợp nguyên âm dùng trong tiếng Việt và rồi so sánh để tìm. Nếu không có chữ nào thì xóa bỏ?
Bài liên quan
static public function stripVietnameseAccent ($inputString) {
// Bảng dịch ký tự không dấu bao gồm 2 bảng mã cho unicode và windows cp 1258
$trans = array (
'á' => 'a', 'à' => 'a', 'ả' => 'a', 'ã' => 'a', 'ạ' => 'a',
'Á' => 'A', 'À' => 'A', 'Ả' => 'A', 'Ã' => 'A', 'Ạ' => 'A',
'â' => 'a', 'ấ' => 'a', 'ầ' => 'a', 'ẩ' => 'a', 'ẫ' => 'a', 'ậ' => 'a',
'Â' => 'A', 'Ấ' => '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', 'ế' => 'e', 'ề' => 'e', 'ể' => 'e', 'ễ' => 'e', 'ệ' => 'e',
'Ê' => 'E', 'Ế' => 'E', 'Ề' => 'E', 'Ể' => 'E', 'Ễ' => 'E', 'Ệ' => 'E',
'í' => 'i', 'ì' => 'i', 'ỉ' => 'i', 'ĩ' => 'i', 'ị' => 'i',
'Í' => 'I', 'Ì' => 'I', 'Ỉ' => 'I', 'Ĩ' => 'I', 'Ị' => 'I',
'ó' => 'o', 'ò' => 'o', 'ỏ' => 'o', 'õ' => 'o', 'ọ' => 'o',
'Ó' => 'O', 'Ò' => 'O', 'Ỏ' => 'O', 'Õ' => 'O', 'Ọ' => 'O',
'ơ' => 'o', 'ớ' => 'o', 'ờ' => 'o', 'ở' => 'o', 'ỡ' => 'o', 'ợ' => 'o',
'Ơ' => 'O', 'Ớ' => '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', 'ứ' => 'u', 'ừ' => 'u', 'ử' => 'u', 'ữ' => 'u', 'ự' => 'u',
'Ư' => 'U', 'Ứ' => 'U', 'Ừ' => 'U', 'Ử' => 'U', 'Ữ' => 'U', 'Ự' => 'U',
'ý' => 'y', 'ỳ' => 'y', 'ỷ' => 'y', 'ỹ' => 'y', 'ỵ' => 'y',
'Ý' => 'Y', 'Ỳ' => 'Y', 'Ỷ' => 'Y', 'Ỹ' => 'Y', 'Ỵ' => 'Y',
'đ' => 'd',
'Đ' => 'D',
' ' => '-'
);
// Dịch Tiếng Việt có dấu thành không dấu theo 2 bảng mã Unicode va window cp 1258
return strtr ( $inputString, $trans ); // Chuỗi đã được bỏ dấu
}
có phải tiếng việt là phải có dấu đâu pa.
vd : tui ko bik nha !
vv.vv..v..
if (mb_trlen($content, 'utf-8')>200)
{
if ($content không chứa kí tự có dấu nào
AND $content không chứa các kí tự tiếng Anh phổ biến như the, any, some, it, that, this...)
return 'Tieng Viet khong dau';
}
return 'OK';
Thoạt nhìn, tưởng như hàm stripVietnameseAccent mà tôi giới thiệu không liên quan gì đến yêu cầu của bạn, nhưng ngược lại, tôi khẳng định là nó có thể giải quyết được vấn đề theo cách nào đó
Cái chúng ta cần là một chút khả năng liên tưởng.
Để tôi gợi ý nhé. Giả sử site của bạn là 1 hệ thống tài chính. Trên thế giới có 2 loại tiền tệ là USD và VND, nhưng hệ thống của bạn chỉ chấp nhận USD. Hàm stripVietnameseAccent làm nhiệm vụ đổi tiền từ USD sang VND theo tỷ giá 1 USD = 18,000 VND. Cái gì liên quan ở đây ?
Tiền đưa vào stripVietnameseAccent sẽ luôn trả về VND. Cho nên :
1, Nếu ai đó đưa vào 10 USD thì nó sẽ trở thành 180,000 VND.
2, Nếu ai đó đưa vào 10 VND thì vẫn là 10 VND.
Nghĩa là, stripVietnameseAccent ngoài việc đổi tiền còn có thể giúp bạn xác định loại tiền đưa vào là USD hay VND.
Như thế, vấn đề đã được giải quyết
Nếu dài hơn 50 char thì cho chạy qua stripVietnameseAccent, sau đó đối chiếu 2 chuỗi trước và sau khi lọc dấu. Nếu trùng nhau thì rất có khả năng chuỗi ban đầu là 1 chuỗi không dấu
P/S:Lục nghề hết rùi, code có đoạn ít xịu mà mất 1 tiếng nản thiệt.
=====
Đã sửa
Cách làm các bạn nêu ra cũng gần giống ý của mình: lọc tìm tiếng Việt có dấu trong 1 đoạn bài viết, nếu có xuất hiện các nguyên âm có dấu thanh thì bài viết có gõ bằng tiếng Việt không dấu, còn không thì tìm tiếp qua từ khác cho đến khi hết bài viết.
Ý mình hỏi là vì làm cách này hơi dài, không biết có cách nào ngắn gọn hơn hay không?
Dù sao cũng cảm ơn các bạn rất nhiều.
Làm như bác thì nó lọc cả ai viết in English :P
Có 2 thứ: 1 là phát hiện ra người ta viết ko dấu, và 2 là người ta viết tiếng Việt. Nói chung làm chức năng này chỉ chậm server , tốt nhất làm nút cảnh báo, ai viết láo + không dấu + ... => thành viên cảnh báo.