Tại sao cần thân thiện hoá đường dẫn URL ?
Trong
quá trình lập trình xử lý tiếng Việt (search, SEO, thao tác chuỗi ký tự
..) các bạn sẽ gặp phải vấn đề xử lý chuỗi tiếng Việt có dấu.
Trong
khuân khổ bài viết, tớ chỉ xin đề cập tới ứng dụng trong SEO. Nếu ai
quan tâm đến SEO thì không thể bỏ qua phương pháp viết lại đường dẫn
(url rewrite, mod_rewrite hay còn gọi là Friendly URL gọi tắt là FURL)
giúp cho đường link gọn, ý nghĩa và có thể chèn thêm từ khóa trong đường
dẫn FURL này.
Thông thường rất nhiều Webmaster sẽ lấy tiêu đề (title) hay phần
miêu tả (description) để nhúng vào đường dẫn FURL. Để tránh các ký tự
đặc biệt bị thay bởi mã HTML trong địa chỉ URL trên thanh địa chỉ của
trình duyệt (adress bar), người ta thường xử lý loại bỏ hoặc thay thế
các ký tự đặc biệt này bằng các ký tự tương đương trong bẳng mã HTML.
Với
tiếng Anh hay các ngôn ngữ gốc Latin khác thì khá đơn giản. Nhưng khi
xử lý chuỗi tiếng Việt để đưa tiêu đề vào FURL chẳng hạn thì có nhiều
trường hợp. Phải liệt kê hết các ký tự đặc biết.
Phần hướng dẫn này mình sẽ chia sẻ cho các bạn các hàm PHP, JavaScript để xử lý chuỗi dấu tiếng Việt.
Hàm PHP xử lý dấu tiếng Việt
function RemoveSign($str)Hàm tiếp theo cũng tương tự
{
$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","e","u","a");
return str_replace($coDau,$khongDau,$str);
}
function khongdau($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;
var ca = new Array ("a","à.á.ạ.ả.ã.â.ầ.ấ.ậ.ẩ.ẫ.ă.ằ.ắ.ặ.ẳ.ẵ.À.Á.Ạ.Ả.Ã.
Â.Ầ.Ấ.Ậ.Ẩ.Ẫ.Ă.Ằ.Ắ.Ặ.Ẳ.Ẵ");
var ce = new Array ("e","è.é.ẹ.ẻ.ẽ.ê.ề.ế.ệ.ể.ễ.È.É.Ẹ.Ẻ.Ẽ.Ê.Ề.Ế.Ệ.Ể.Ễ");
var ci = new Array ("i","ì.í.ị.ỉ.ĩ.Ì.Í.Ị.Ỉ.Ĩ");
var co = new Array ("o","ò.ó.ọ.ỏ.õ.ô.ồ.ố.ộ.ổ.ỗ.ơ.ờ.ớ.ợ.ở.ỡ.Ò.Ó.Ọ.Ỏ.Õ.
Ô.Ồ.Ố.Ộ.Ổ.Ỗ.Ơ.Ờ.Ớ.Ợ.Ở.Ỡ");
var cu = new Array ("u","ù.ú.ụ.ủ.ũ.ư.ừ.ứ.ự.ử.ữ.Ù.Ú.Ụ.Ủ.Ũ.Ư.Ừ.Ứ.Ự.Ử.Ữ
");
var cy = new Array ("y","ỳ.ý.ỵ.ỷ.ỹ.Ỳ.Ý.Ỵ.Ỷ.Ỹ");
var cd = new Array ("d","đ.Đ");
var cs = new Array ("","\\'.~.@.#.%.^.&");
var bangkitucoso = new Array(ca,ce,ci,co,cu,cy,cd,cs);
function mLocDau(bv) { var markhongdau = new Array();
markhongdau[0]=bv; for (j=0; j < bangkitucoso.length; j++)
// max j = 8 { marthaythe = bangkitucoso[j][1].split(\\'.
\\');
// tach cac chuoi co dau thanh tung phan tu rieng biet for
(i=0; i < marthaythe.length; i++)
{ markhongdau[i+1] = mThayThe(markhongdau[i],marthaythe[i],
bangkitucoso[j][0]);
markhongdau[0]=markhongdau[i+1].toLowerCase(); } }
//end of for
// kiem tra loi injection
// document.getElementById(\\'uoon\\').
innerHTML =markhongdau[0]; return markhongdau[0]; }
// ham nay co chuc nang tuong tu nhu str_replace trong
php function mThayThe(ccha,cbithay,cthaythe)
{ var ccon = "/" + cbithay +"/gi";
var cmoi=ccha.replace(eval(ccon),cthaythe); return cmoi;}
function make_title_furl($text){
//global $ibforums;
//Charachters must be in ASCII and certain ones aint allowed
$text = html_entity_decode ($text);
$text = preg_replace("/(ä|à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ)/",
'a', $text);
$text = str_replace("ç","c",$text);
$text = preg_replace("/(è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ)/", 'e', $text);
$text = preg_replace("/(ì|í|î|ị|ỉ|ĩ)/", 'i', $text);
$text = preg_replace("/(ö|ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ)/",
'o', $text);
$text = preg_replace("/(ü|ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ)/", 'u', $text);
$text = preg_replace("/(ỳ|ý|ỵ|ỷ|ỹ)/", 'y', $text);
$text = preg_replace("/(đ)/", 'd', $text);
//CHU HOA
$text = preg_replace("/(Ä|À|Á|Ạ|Ả|Ã|Â|Ầ|Ấ|Ậ|Ẩ|Ẫ|Ă|Ằ|Ắ|Ặ|Ẳ|Ẵ)/",
'A', $text);
$text = str_replace("Ç","C",$text);
$text = preg_replace("/(È|É|Ẹ|Ẻ|Ẽ|Ê|Ề|Ế|Ệ|Ể|Ễ)/", 'E', $text);
$text = preg_replace("/(Ì|Í|Ị|Ỉ|Ĩ)/", 'I', $text);
$text = preg_replace("/(Ö|Ò|Ó|Ọ|Ỏ|Õ|Ô|Ồ|Ố|Ộ|Ổ|Ỗ|Ơ|Ờ|Ớ|Ợ|Ở|Ỡ)/",
'O', $text);
$text = preg_replace("/(Ü|Ù|Ú|Ụ|Ủ|Ũ|Ư|Ừ|Ứ|Ự|Ử|Ữ)/", 'U', $text);
$text = preg_replace("/(Ỳ|Ý|Ỵ|Ỷ|Ỹ)/", 'Y', $text);
$text = preg_replace("/(Đ)/", 'D', $text);
//Special string
$text = preg_replace("/( |!|"|#|$|%|')/", '', $text);
$text = preg_replace("/(̀|́|̉|$|>)/", '', $text);
$text = preg_replace ("''si", "", $text);
/*
$text = str_replace(" / ","-",$text);
$text = str_replace("/","-",$text);
$text = str_replace(" - ","-",$text);
$text = str_replace("_","-",$text);
$text = str_replace(" ","-",$text);
$text = str_replace( "ß", "ss", $text);
$text = str_replace( "&", "", $text);
$text = str_replace( "%", "", $text);
$text = ereg_replace("[^A-Za-z0-9-]", "", $text);
*/
$text = str_replace("----","-",$text);
$text = str_replace("---","-",$text);
$text = str_replace("--","-",$text);
return $text;
}
Xử lý tiếng Việt cho Blogger WordPressfunction qad_remove_accents ( $string ) {
$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’,
‘đ’=>’d’,’Đ’=>’d’,
‘è’=>’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’,’Ỹ’=>’y’,’Ỵ’=>’y’
) ;return strtr ( $string , $trans ) ;
}