Lọc bỏ dấu tiếng việt 2007-07-09 09:23:59


Trong quá trình lập trình, có lúc chúng ta muốn lọc bỏ dấu tiếng Việt. (để search chẳng hạn). Tôi xin nêu ra một cách để cách để các bạn tham khảo:

Giả sử ta có một chuỗi :
<?
$cs
="Thật là lắm chuyện";

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

$marKoDau=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");
echo
str_replace($marTViet,$marKoDau,$cs);
?>

đoạn mã trên sẽ in ra màn hình dòng chữ sau:
That la lam chuyen

Các bạn có cách nào khác thì post lên cho anh em tham khảo. Tôi cũng còn một cách khác dùng JavaScript, nhưng do không phải là php nên không tiện post
Tác giả: uoon

Tra loi 8 comment(s) Nguyễn Minh Tân 2007-07-09 09:23:59

gaulucky92 2008-02-21 10:55:02

Wow hay tuyệt cảm ơn nhiều nhé :D mình đang cần cái này để hạn chế đặt nick = TV...

Tra loi

Kay 2009-11-30 01:04:49

thấy function của TG hay hơn

Tra loi

Joomla friends 2009-12-27 05:42:36

Bác nào sử dụng Joomla thì cài PLUGIN này nhé: http://kulkul.xahoihoctap.net/kho-tai-lieu.html?func=fileinfo&id=16

Mục đích là tách tiếng Việt có dấu sang không dấu.

Tra loi

Daniel 2010-01-29 03:22:48

@Kay: bạn có thể giới thiệu function đó cho mọi người cùng tham khảo đc ko :P

Tra loi

Kay 2010-05-25 16:36:46

lạ thế nhỉ? post trong này 1 lần rùi mà giờ biến mất rùi :-s

/* ------------- UTF8 to Ascii ------------- */
function utf8_to_ascii($str){
        if(!$str) return false;
        $unicode = array(
'a' => 'A|Á|À|Ả|Ã|Ạ|Ă|Ắ|Ằ|Ẳ|Ẵ|Ặ|Â|Ấ|Ầ|Ẩ|Ẫ|Ậ|á|à|ả|ã|ạ|ă|ắ|ằ|ẳ|ẵ|ặ|â|ấ|ầ|ẩ|ẫ|ậ',
'b' =>  'B',
'c' =>  'C',
'd' => 'D|Đ|đ',
'e' => 'E|É|È|Ẻ|Ẽ|Ẹ|Ê|Ế|Ề|Ể|Ễ|Ệ|é|è|ẻ|ẽ|ẹ|ê|ế|ề|ể|ễ|ệ',
'f' => 'F',
'g' => 'G',
'h' => 'H',
'i' => 'I|Í|Ì|Ỉ|Ĩ|Ị|í|ì|ỉ|ĩ|ị',
'j' => 'J',
'k' => 'K',
'l' => 'L',
'm' => 'M',
'n' => 'N',
'o' => 'O|Ó|Ò|Ỏ|Õ|Ọ|Ô|Ố|Ồ|Ổ|Ỗ|Ộ|Ơ|Ớ|Ờ|Ở|Ỡ|Ợ|ó|ò|ỏ|õ|ọ|ô|ố|ồ|ổ|ỗ|ộ|ơ|ớ|ờ|ở|ỡ|ợ',
'p' => 'P',
'q' => 'Q',
'r' => 'R',
's' => 'S',
't' => 'T',
'u' => 'U|Ú|Ù|Ủ|Ũ|Ụ|Ư|Ứ|Ừ|Ử|Ữ|Ự|ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ữ|ự',
'v' => 'V',
'w' => 'W',
'x' => 'X',
'y' => 'Y|Ý|Ỳ|Ỷ|Ỹ|Ỵ|ý|ỳ|ỷ|ỹ|ỵ',
'z' => 'Z'
        );
        foreach($unicode as $nonUnicode=>$uni) $str = preg_replace("/($uni)/i",$nonUnicode,$str);
return $str;
    }

Tra loi

chaocacbac 2010-06-04 16:56:05

@Kay: cho em làm phiền các bác một ty. bây giờ em muốn lật ngược lại vấn đề tức là em nhập vào là "that la lam chuyen" và em muốn nó ra là "thật là lắm chuyện" thì có cách nào làm được không ạ.

Tra loi

vietnguyen 2010-06-07 10:21:05

@chaocacbac: cách này hay nè bạn, ngắn gọn :)
function StripVowelAccent($str,$space_replace = "")
{
$clean = @iconv('UTF-8', 'ASCII//TRANSLIT', $str);
$clean = preg_replace("/[^a-zA-Z0-9\/_|+ -]/", '', $clean);
$clean = strtolower(trim($clean, '-'));
$clean = preg_replace("/[\/_|+ -]+/", $space_replace, $clean);
return $clean;
}

Tra loi

xuanhoa88 2010-06-11 17:56:55

@vietnguyen:

function convert($text = NULL, $type = NULL)
{
switch ($type)
{
case 'upper': $html = mb_convert_case($text, MB_CASE_UPPER, 'utf-8'); break;
case 'title': $html = mb_convert_case($text, MB_CASE_TITLE, 'utf-8'); break;
default: $html = mb_convert_case($text, MB_CASE_LOWER, 'utf-8'); break;
}
return $html;
}

function utf8_to_ascii($str = '')
{
$str_lower = convert($str);
$chars = array
(
'a' => array('a', 'á', 'à', 'ả', 'ạ', 'ã', 'â', 'ấ', 'ầ', 'ẩ', 'ậ', 'ẫ', 'ă', 'ắ', 'ằ', 'ẳ', 'ặ', 'ẵ'),
'b' => array('b'),
'c' => array('c'),
'd' => array('d', 'đ'),
'e' => array('e', 'é', 'è', 'ẻ', 'ẹ', 'ẽ', 'ê', 'ế', 'ề', 'ể', 'ệ', 'ễ'),
'f' => array('f'),
'g' => array('g'),
'h' => array('h'),
'j' => array('j'),
'k' => array('k'),
'l' => array('l'),
'm' => array('m'),
'n' => array('n'),
'i' => array('i', 'í', 'ì', 'ỉ', 'ị', 'ỹ'),
'o' => array('o', 'ó', 'ò', 'ỏ', 'ọ', 'ỡ', 'ơ', 'ớ', 'ờ', 'ở', 'ợ', 'ỡ', 'ô', 'ố', 'ồ', 'ổ', 'ộ', 'ỗ'),
'u' => array('u', 'ú', 'ù', 'ủ', 'ụ', 'ú', 'ư', 'ứ', 'ừ', 'ử', 'ữ', 'ự'),
'y' => array('y', 'ý', 'ỳ', 'ỵ', 'ỷ', 'ỹ'),
'q' => array('q'),
'w' => array('w'),
'r' => array('r'),
't' => array('t'),
'p' => array('p'),
's' => array('s'),
'z' => array('z'),
'x' => array('x'),
'v' => array('v'),
);
foreach ($chars as $k => $v)
{
foreach ($v as $char)
{
$str_lower = str_replace($char, $k, $str_lower);
}
}
$str_lower = preg_replace('/[^a-z0-9\s-.]/i', NULL, $str_lower);
return trim($str_lower);
}

Tra loi

Y kien