Xử lý dấu tiếng Việt trong URL WordPress

Posted on

Theo mặc định bình thường WordPress rất “ngu” phần Tiếng Việt. Do đó, Permalink được tạo ra thường chứa các kí tự tiếng Việt kiểu nửa ta nữa tây rất khó chịu. Đã vậy nó còn mã hóa thành vào chục cái dấu % nữa chứ. Nhân vừa tiến hành việc này tôi gửi đến cái hướng dẫn sửa liên kết bài viết (Permalink) trong wordpress để nó hiểu tiếng Việt của ta tốt hơn. Tôi hi vọng bài này giúp được những bạn xài WordPress bớt đi chút khó khăn khi cứ phải ngồi chỉnh sửa cái Permalink mỗi khi viết bài. Lục tung cái code của WordPress (hồi trước Blog WordPress của tôi đang sử dụng phiên bản 2.8.2) tôi tìm được cái hàm sanitize_title_with_dashes() nằm trong file wp-includes/formatting.php . Đây là file write lại cái Permalink của WordPress. Cũng chính vì ở đây việc xử lý tiếng Việt còn hạn chế nên cái Permalink của chúng ta nhìn không đẹp mặt lắm. Tôi thử sửa cái hàm đó lại như sau:

function sanitize_title_with_dashes($title) {
$url_pattern = array('`&(amp;|#)?[a-z0-9]+;`i', '`[^a-z0-9]`i');

$title = htmlentities($title, ENT_COMPAT, ‘utf-8’);
$title = preg_replace( ‘`&([a-z]+)(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig);`i’, “\1″, $title );
$title = preg_replace(‘`[.*]`U’,”,$title);
$title = strtolower(trim($title, ‘-‘));

$title = preg_replace(“/(à|á|ạ|ả|ã|â|ầ|ấ|ậ|ẩ|ẫ|ă|ằ|ắ|ặ|ẳ|ẵ)/”, ‘a’, $title);
$title = preg_replace(“/(è|é|ẹ|ẻ|ẽ|ê|ề|ế|ệ|ể|ễ)/”, ‘e’, $title);
$title = preg_replace(“/(ì|í|ị|ỉ|ĩ)/”, ‘i’, $title);
$title = preg_replace(“/(ò|ó|ọ|ỏ|õ|ô|ồ|ố|ộ|ổ|ỗ|ơ|ờ|ớ|ợ|ở|ỡ)/”, ‘o’, $title);
$title = preg_replace(“/(ù|ú|ụ|ủ|ũ|ư|ừ|ứ|ự|ử|ữ)/”, ‘u’, $title);
$title = preg_replace(“/(ỳ|ý|ỵ|ỷ|ỹ)/”, ‘y’, $title);
$title = preg_replace(“/(đ)/”, ‘d’, $title);
$title = preg_replace($url_pattern , ‘-‘, $title);
return $title;
}

OK! Tôi thử và nó chạy tốt. Bạn có thể sử dụng hàm này của tôi nếu muốn. Nếu bạn sợ việc update phiên bản làm mất hàm này thì bạn có thể download plugin này (cái này tôi viết riêng ra cho dễ):

Permalink_Friendly_for_Vietnamese.zip

Chúc các bạn thành công.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s