Diễn Đàn SEO Panda - SEO Panda Forum

Diễn Đàn SEO Panda Dành Cho Các SEOers Tự Do Thảo Luận SEO - SEO Panda Forum - Free SEO Forum to share your knowledge to the world
 
HomeCalendarFAQSearchMemberlistUsergroupsRegisterLog in
Search
 
 

Display results as :
 
Rechercher Advanced Search
Latest topics

Share | 
 

 Xử lý dấu tiếng Việt – Link URL thân thiện SEO

View previous topic View next topic Go down 
AuthorMessage
khiemsound



Posts : 1016
Points : 11615
Join date : 2012-03-27

PostSubject: Xử lý dấu tiếng Việt – Link URL thân thiện SEO   Tue Apr 10, 2012 2:49 pm

Tại sao cần thân thiện hoá đường dẫn URL ?
Tại sao cần thân thiện hoá đường dẫn URL ?
Hàm PHP xử lý dấu tiếng Việt
Xử lý tiếng Việt cho Invision Power Board
Xử lý tiếng Việt cho Blogger WordPress

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)
{
$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);
}

Hàm tiếp theo cũng tương tự
[source:php]
$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);[/source]
Đoạn mã trên sẽ in ra màn hình dòng chữ sau:

That la lam chuyen

Một bản khác dùng hàm preg_replace (tớ thích dùng hơn)
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;

Hàm Javascript
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;}
Xử lý tiếng Việt cho Invision Power Board


Còn đây là hàm mà tớ sử dụng để viết lại đường dẫn FURL cho diễn đàn Invision Power Board với bẳng mã ISO-8859-1
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;
}


Link demo FURL với Invision Power Board : Sinh viên Việt Nam FURL Rewrite.
Xử lý tiếng Việt cho Blogger WordPress

Với những người sử dụng blog WordPress nếu không chỉnh sửa đường dẫn bằng Post Slug thì khi bạn viết một tiêu đề tiếng Việt, các nguyên âm có dấu sẽ bị chuyển mã hó dạng %xx không thân thiện tí nào. Theo tác giả Quang Anh (onetruebrace.com) thì WordPress sử dụng hàm mang tên sanitize_title_with_dashes để chuyển đổi tiêu đề thành permalink có dấu ngạch ngang phân cách các từ :
add_filter(’sanitize_title’, ’sanitize_title_with_dashes’);
Tất cả những gì phải làm là thực thi hàm xử lý tiếng Việt có dấu sang dạng không dấu ngay trước hàm sanitize_title_with_dashes:
function 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 ) ;
}
Back to top Go down
View user profile
 
Xử lý dấu tiếng Việt – Link URL thân thiện SEO
View previous topic View next topic Back to top 
Page 1 of 1
 Similar topics
-
» Xpath Syntax
» How to verify all element present in application.
» open every link in a new tab?
» Query - web driver element click is not working
» How to use storetext and verify text? It is failing for me..

Permissions in this forum:You cannot reply to topics in this forum
Diễn Đàn SEO Panda - SEO Panda Forum :: Search Engine Optimization :: SEO Tools & SEO Tips-
Jump to: