Kênh 360 Công Nghệ Kênh 360 Công Nghệ

Trang chủ - Joomla - Giới thiệu - Hướng dẫn - Hiển thị alias tiếng Việt utf-8 ứng dụng cho SEO/SEF trong Joomla

Hiển thị alias tiếng Việt utf-8 ứng dụng cho SEO/SEF trong Joomla

Từ Joomla 1.5, khi bạn đặt tiêu đề bài viết xong, nếu bạn không đặt tiêu đề cho trường tiêu đề alias khi đó Joomla sẽ tự động thay lấy nội dung từ tiêu đề bài viết, chuyển thành chữ thường ASCII. Nếu bạn sử dụng tiếng Việt Unicode có dấu (dấu mũ, râu, sắc, huyền, hỏi ngã và nặng), sẽ có khá nhiều ký tự có dấu sẽ bị cắt như ă, ớ,...

Giải pháp:

Sử dụng phương án của kochin: khi đó ký tự tiếng Việt vẫn được giữ nguyên, nghĩa là bạn sẽ thấy status của IE hay FF hiển thị đúng nội dung tiếng Việt.
Cách làm như sau:
Thay đổi nội dung các hàm trong các file sau đây:
Mã PHP:
Thay hàm stringURLSafe() trong libraries/joomla/filter/filteroutput.php bằng nội dung sau:
function stringURLSafe($string)
{
//remove any '-' from the string they will be used as concatonater
$str = str_replace('-', ' ', $string);

$lang =& JFactory::getLanguage();
$str = $lang->transliterate($str);

// remove any duplicate whitespace, and ensure all characters are alphanumeric
//$str = preg_replace(array('/\s+/','/[^A-Za-z0-9\-]/'), array('-',''), $str);
$str = preg_replace(array('/\s+/', '/\./'), array('-', '_'), $str);

// lowercase and trim
$str = trim(strtolower($str));
return $str;
}

Thay đổi hàm transliterate() trong file libraries/joomla/language/language.php bằng nội dung sau:

 function transliterate($string)
 {
//$string = htmlentities(utf8_decode($string));
 $string = htmlentities($string, ENT_COMPAT, 'UTF-8');
$string = preg_replace(
array('/ß/','/&(..)lig;/', '/&([aouAOU])uml;/','/&(.)[^;]*;/'),
array('ss',"$1","$1".'e',"$1"),
 $string);

return $string; }

Tuy nhiên, khi bạn click vào link này, ở ô địa chỉ, các ký tự unicode sẽ bị mã hóa. Để chuyển toàn bộ ký tự có dấu thành ký tự không dấu, các bạn bổ sung thêm theo hướng dẫn ở mục 2.

Để hiển thị tiếng Việt, việc chúng ta cần làm là tạo lập 1 bảng ký tự ánh xạ và sử dụng hàm strtr để làm việc thay thế này.
Mã:
function stringURLSafe($string)
{
$trans = array(
"đ"=>"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",
"í"=>"i","ì"=>"i","ỉ"=>"i","ĩ"=>"i","ị"=>"i",
"ư"=>"u","ô"=>"o","ơ"=>"o","ê"=>"e",
"Ư"=>"u","Ô"=>"o","Ơ"=>"o","Ê"=>"e",
"ú"=>"u","ù"=>"u","ủ"=>"u","ũ"=>"u","ụ"=>"u",
"ứ"=>"u","ừ"=>"u","ử"=>"u","ữ"=>"u","ự"=>"u",
"ó"=>"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",'ý'=>'y','ỳ'=>'y','ỷ'=>'y','ỹ'=>'y','ỵ'=>'y', 'Ý'=>'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",
"Í"=>"I","Ì"=>"I","Ỉ"=>"I","Ĩ"=>"I","Ị"=>"I",
"Ư"=>"U","Ô"=>"O","Ơ"=>"O","Ê"=>"E",
"Ư"=>"U","Ô"=>"O","Ơ"=>"O","Ê"=>"E",
"Ú"=>"U","Ù"=>"U","Ủ"=>"U","Ũ"=>"U","Ụ"=>"U",
"Ứ"=>"U","Ừ"=>"U","Ử"=>"U","Ữ"=>"U","Ự"=>"U",
"Ó"=>"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",);

//remove any '-' from the string they will be used as concatonater
$str = str_replace('-', ' ', $string);
$str = strtr($str, $trans);
$lang =& JFactory::getLanguage();
$str = $lang->transliterate($str);

// remove any duplicate whitespace, and ensure all characters are alphanumeric
$str = preg_replace(array('/\s+/','/[^A-Za-z0-9\-]/'), array('-',''), $str);
// $str = preg_replace(array('/\s+/', '/\./'), array('-', '_'), $str);
//$str = utf8_accents_to_ascii($str);
// lowercase and trim
$str = trim(strtolower($str));
return $str;
}

Bài viết này tham khảo qua bài viết của kochin tại:

http://www.joomla.org.tw/component/option,com_smf/Itemid,180/topic,2901.msg9217

Và được bổ sung bởi viet4777 - luyenkim.net

Theo kulkul.xahoihoctap.net



Tin liên quan:
Tin mới hơn:
Tin cũ hơn:

Lần cập nhật cuối ( Thứ hai, 08 Tháng 6 2009 08:40 )  

Kênh 360 công nghệ

  • Nổi bật
  • Tin mới
  • Game mới
  • PrestaShop Guide
  • PrestaShop

Có thể bạn quan tâm

Download nhiều nhất

11/12
Download PES 2011 - FIFA 11
693
18/12
binkw32 dll
175
18/12
TeamViewerQS
49
English French German Japanese Korean