Bài viết này lẽ ra đã không được publish. Mục đích của mình chỉ là kiểm tra xem WordPress 3.4 xử lý tiếng Việt trong Permalink như thế nào. Trước 3.4, WordPress xử lý việc này không tốt, cụ thể là với tiêu đề như trên, WordPress sẽ xử lý thành “thử-một-bai-viết-co-rất-nhiều-tiếng-việt”. WordPress 3.4 đã xử lý việc này rất tốt, URL trở thành “thu-mot-bai-viet-co-rat-nhieu-tieng-viet”.

Dưới đây là đoạn code được mình viết và đặt trong file wp-includes/formatting.php để xử lý tiếng Việt trong Permalink. WordPress 3.4 cũng có một đoạn xử lý tương tự nhưng đã tối ưu và loại bỏ các ký tự trùng với các phần sẵn có trong WordPress.

[code]
// Decompositions for Vietnamese
chr(65) => ‘A’,chr(97) => ‘a’,
chr(196).chr(130) => ‘A’,chr(196).chr(131) => ‘a’,
chr(195).chr(130) => ‘A’,chr(195).chr(162) => ‘a’,
chr(195).chr(128) => ‘A’,chr(195).chr(160) => ‘a’,
chr(225).chr(186).chr(176) => ‘A’,chr(225).chr(186).chr(177) => ‘a’,
chr(225).chr(186).chr(166) => ‘A’,chr(225).chr(186).chr(167) => ‘a’,
chr(195).chr(129) => ‘A’,chr(195).chr(161) => ‘a’,
chr(225).chr(186).chr(174) => ‘A’,chr(225).chr(186).chr(175) => ‘a’,
chr(225).chr(186).chr(164) => ‘A’,chr(225).chr(186).chr(165) => ‘a’,
chr(225).chr(186).chr(162) => ‘A’,chr(225).chr(186).chr(163) => ‘a’,
chr(225).chr(186).chr(178) => ‘A’,chr(225).chr(186).chr(179) => ‘a’,
chr(225).chr(186).chr(168) => ‘A’,chr(225).chr(186).chr(169) => ‘a’,
chr(195).chr(131) => ‘A’,chr(195).chr(163) => ‘a’,
chr(225).chr(186).chr(180) => ‘A’,chr(225).chr(186).chr(181) => ‘a’,
chr(225).chr(186).chr(170) => ‘A’,chr(225).chr(186).chr(171) => ‘a’,
chr(225).chr(186).chr(160) => ‘A’,chr(225).chr(186).chr(161) => ‘a’,
chr(225).chr(186).chr(182) => ‘A’,chr(225).chr(186).chr(183) => ‘a’,
chr(225).chr(186).chr(172) => ‘A’,chr(225).chr(186).chr(173) => ‘a’,
chr(69) => ‘E’,chr(101) => ‘e’,
chr(195).chr(138) => ‘E’,chr(195).chr(170) => ‘e’,
chr(195).chr(136) => ‘E’,chr(195).chr(168) => ‘e’,
chr(225).chr(187).chr(128) => ‘E’,chr(225).chr(187).chr(129) => ‘e’,
chr(195).chr(137) => ‘E’,chr(195).chr(169) => ‘e’,
chr(225).chr(186).chr(190) => ‘E’,chr(225).chr(186).chr(191) => ‘e’,
chr(225).chr(186).chr(186) => ‘E’,chr(225).chr(186).chr(187) => ‘e’,
chr(225).chr(187).chr(130) => ‘E’,chr(225).chr(187).chr(131) => ‘e’,
chr(225).chr(186).chr(188) => ‘E’,chr(225).chr(186).chr(189) => ‘e’,
chr(225).chr(187).chr(132) => ‘E’,chr(225).chr(187).chr(133) => ‘e’,
chr(225).chr(186).chr(184) => ‘E’,chr(225).chr(186).chr(185) => ‘e’,
chr(225).chr(187).chr(134) => ‘E’,chr(225).chr(187).chr(135) => ‘e’,
chr(73) => ‘I’,chr(105) => ‘i’,
chr(195).chr(140) => ‘I’,chr(195).chr(172) => ‘i’,
chr(195).chr(141) => ‘I’,chr(195).chr(173) => ‘i’,
chr(225).chr(187).chr(136) => ‘I’,chr(225).chr(187).chr(137) => ‘i’,
chr(225).chr(187).chr(138) => ‘I’,chr(225).chr(187).chr(139) => ‘i’,
chr(79) => ‘O’,chr(111) => ‘o’,
chr(195).chr(148) => ‘O’,chr(195).chr(180) => ‘o’,
chr(198).chr(160) => ‘O’,chr(198).chr(161) => ‘o’,
chr(195).chr(146) => ‘O’,chr(195).chr(178) => ‘o’,
chr(225).chr(187).chr(146) => ‘O’,chr(225).chr(187).chr(147) => ‘o’,
chr(225).chr(187).chr(156) => ‘O’,chr(225).chr(187).chr(157) => ‘o’,
chr(195).chr(147) => ‘O’,chr(195).chr(179) => ‘o’,
chr(225).chr(187).chr(144) => ‘O’,chr(225).chr(187).chr(145) => ‘o’,
chr(225).chr(187).chr(154) => ‘O’,chr(225).chr(187).chr(155) => ‘o’,
chr(225).chr(187).chr(142) => ‘O’,chr(225).chr(187).chr(143) => ‘o’,
chr(225).chr(187).chr(148) => ‘O’,chr(225).chr(187).chr(149) => ‘o’,
chr(225).chr(187).chr(158) => ‘O’,chr(225).chr(187).chr(159) => ‘o’,
chr(195).chr(149) => ‘O’,chr(195).chr(181) => ‘o’,
chr(225).chr(187).chr(150) => ‘O’,chr(225).chr(187).chr(151) => ‘o’,
chr(225).chr(187).chr(160) => ‘O’,chr(225).chr(187).chr(161) => ‘o’,
chr(225).chr(187).chr(140) => ‘O’,chr(225).chr(187).chr(141) => ‘o’,
chr(225).chr(187).chr(152) => ‘O’,chr(225).chr(187).chr(153) => ‘o’,
chr(225).chr(187).chr(162) => ‘O’,chr(225).chr(187).chr(163) => ‘o’,
chr(85) => ‘U’,chr(117) => ‘u’,
chr(198).chr(175) => ‘U’,chr(198).chr(176) => ‘u’,
chr(195).chr(153) => ‘U’,chr(195).chr(185) => ‘u’,
chr(225).chr(187).chr(170) => ‘U’,chr(225).chr(187).chr(171) => ‘u’,
chr(195).chr(154) => ‘U’,chr(195).chr(186) => ‘u’,
chr(225).chr(187).chr(168) => ‘U’,chr(225).chr(187).chr(169) => ‘u’,
chr(225).chr(187).chr(166) => ‘U’,chr(225).chr(187).chr(167) => ‘u’,
chr(225).chr(187).chr(172) => ‘U’,chr(225).chr(187).chr(173) => ‘u’,
chr(196).chr(168) => ‘U’,chr(196).chr(169) => ‘u’,
chr(197).chr(168) => ‘U’,chr(197).chr(169) => ‘u’,
chr(225).chr(187).chr(174) => ‘U’,chr(225).chr(187).chr(175) => ‘u’,
chr(225).chr(187).chr(164) => ‘U’,chr(225).chr(187).chr(165) => ‘u’,
chr(225).chr(187).chr(176) => ‘U’,chr(225).chr(187).chr(177) => ‘u’,
chr(89) => ‘Y’,chr(121) => ‘y’,
chr(225).chr(187).chr(178) => ‘Y’,chr(225).chr(187).chr(179) => ‘y’,
chr(195).chr(157) => ‘Y’,chr(195).chr(189) => ‘y’,
chr(225).chr(187).chr(182) => ‘Y’,chr(225).chr(187).chr(183) => ‘y’,
chr(225).chr(187).chr(184) => ‘Y’,chr(225).chr(187).chr(185) => ‘y’,
chr(225).chr(187).chr(180) => ‘Y’,chr(225).chr(187).chr(181) => ‘y’,
chr(68) => ‘D’,chr(100) => ‘d’,
chr(196).chr(144) => ‘D’,chr(196).chr(145) => ‘d’,
[/code]

Đây là đoạn code của WordPress

[code]
// Vowels with diacritic (Vietnamese)
// unmarked
chr(198).chr(160) => ‘O’, chr(198).chr(161) => ‘o’,
chr(198).chr(175) => ‘U’, chr(198).chr(176) => ‘u’,
// grave accent
chr(225).chr(186).chr(166) => ‘A’, chr(225).chr(186).chr(167) => ‘a’,
chr(225).chr(186).chr(176) => ‘A’, chr(225).chr(186).chr(177) => ‘a’,
chr(225).chr(187).chr(128) => ‘E’, chr(225).chr(187).chr(129) => ‘e’,
chr(225).chr(187).chr(146) => ‘O’, chr(225).chr(187).chr(147) => ‘o’,
chr(225).chr(187).chr(156) => ‘O’, chr(225).chr(187).chr(157) => ‘o’,
chr(225).chr(187).chr(170) => ‘U’, chr(225).chr(187).chr(171) => ‘u’,
chr(225).chr(187).chr(178) => ‘Y’, chr(225).chr(187).chr(179) => ‘y’,
// hook
chr(225).chr(186).chr(162) => ‘A’, chr(225).chr(186).chr(163) => ‘a’,
chr(225).chr(186).chr(168) => ‘A’, chr(225).chr(186).chr(169) => ‘a’,
chr(225).chr(186).chr(178) => ‘A’, chr(225).chr(186).chr(179) => ‘a’,
chr(225).chr(186).chr(186) => ‘E’, chr(225).chr(186).chr(187) => ‘e’,
chr(225).chr(187).chr(130) => ‘E’, chr(225).chr(187).chr(131) => ‘e’,
chr(225).chr(187).chr(136) => ‘I’, chr(225).chr(187).chr(137) => ‘i’,
chr(225).chr(187).chr(142) => ‘O’, chr(225).chr(187).chr(143) => ‘o’,
chr(225).chr(187).chr(148) => ‘O’, chr(225).chr(187).chr(149) => ‘o’,
chr(225).chr(187).chr(158) => ‘O’, chr(225).chr(187).chr(159) => ‘o’,
chr(225).chr(187).chr(166) => ‘U’, chr(225).chr(187).chr(167) => ‘u’,
chr(225).chr(187).chr(172) => ‘U’, chr(225).chr(187).chr(173) => ‘u’,
chr(225).chr(187).chr(182) => ‘Y’, chr(225).chr(187).chr(183) => ‘y’,
// tilde
chr(225).chr(186).chr(170) => ‘A’, chr(225).chr(186).chr(171) => ‘a’,
chr(225).chr(186).chr(180) => ‘A’, chr(225).chr(186).chr(181) => ‘a’,
chr(225).chr(186).chr(188) => ‘E’, chr(225).chr(186).chr(189) => ‘e’,
chr(225).chr(187).chr(132) => ‘E’, chr(225).chr(187).chr(133) => ‘e’,
chr(225).chr(187).chr(150) => ‘O’, chr(225).chr(187).chr(151) => ‘o’,
chr(225).chr(187).chr(160) => ‘O’, chr(225).chr(187).chr(161) => ‘o’,
chr(225).chr(187).chr(174) => ‘U’, chr(225).chr(187).chr(175) => ‘u’,
chr(225).chr(187).chr(184) => ‘Y’, chr(225).chr(187).chr(185) => ‘y’,
// acute accent
chr(225).chr(186).chr(164) => ‘A’, chr(225).chr(186).chr(165) => ‘a’,
chr(225).chr(186).chr(174) => ‘A’, chr(225).chr(186).chr(175) => ‘a’,
chr(225).chr(186).chr(190) => ‘E’, chr(225).chr(186).chr(191) => ‘e’,
chr(225).chr(187).chr(144) => ‘O’, chr(225).chr(187).chr(145) => ‘o’,
chr(225).chr(187).chr(154) => ‘O’, chr(225).chr(187).chr(155) => ‘o’,
chr(225).chr(187).chr(168) => ‘U’, chr(225).chr(187).chr(169) => ‘u’,
// dot below
chr(225).chr(186).chr(160) => ‘A’, chr(225).chr(186).chr(161) => ‘a’,
chr(225).chr(186).chr(172) => ‘A’, chr(225).chr(186).chr(173) => ‘a’,
chr(225).chr(186).chr(182) => ‘A’, chr(225).chr(186).chr(183) => ‘a’,
chr(225).chr(186).chr(184) => ‘E’, chr(225).chr(186).chr(185) => ‘e’,
chr(225).chr(187).chr(134) => ‘E’, chr(225).chr(187).chr(135) => ‘e’,
chr(225).chr(187).chr(138) => ‘I’, chr(225).chr(187).chr(139) => ‘i’,
chr(225).chr(187).chr(140) => ‘O’, chr(225).chr(187).chr(141) => ‘o’,
chr(225).chr(187).chr(152) => ‘O’, chr(225).chr(187).chr(153) => ‘o’,
chr(225).chr(187).chr(162) => ‘O’, chr(225).chr(187).chr(163) => ‘o’,
chr(225).chr(187).chr(164) => ‘U’, chr(225).chr(187).chr(165) => ‘u’,
chr(225).chr(187).chr(176) => ‘U’, chr(225).chr(187).chr(177) => ‘u’,
chr(225).chr(187).chr(180) => ‘Y’, chr(225).chr(187).chr(181) => ‘y’,
[/code]

Nhìn lại thì xem ra cũng không tối ưu được nhiều lắm, chỉ là tổ chức tốt hơn, chia thành nhiều nhóm nhỏ.

Thử một bài viết có rất nhiều tiếng Việt
Tagged on:             

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>