|
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 Đặt vấn đề: - 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.
- 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.
- Chú ý: Các nêu trong bài viết này là HACK trực tiếp CORE của Joomla nên k0 phải là giải pháp tốt. Hãy sử dụng plugin sau để giải quyết vấn đề trên: Đó là sử dụng Joomla! Hello SEF for title alias.
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: 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.
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; }
Nội dung modified file filteroutput.php (tôi để ở txt, nhớ chuyển utf-8). Rất cảm ơn bạn đã ghé thăm thế giới của Kulkul - Welcome to kulkul's world - Nguyễn Thanh Thảo
Related news items:
Newer news items:
|