1+ <?php
2+ /**
3+ * Created by PhpStorm.
4+ * User: hocvt
5+ * Date: 6/30/16
6+ * Time: 08:08
7+ */
8+
9+ namespace StupidDev \ViEncoder \Encoder ;
10+
11+
12+ class Converter {
13+ protected static $ maps = array (
14+ Code::CHARSET_UNICODE => array (
15+ "À " , "Á " , "Â " , "Ã " , "È " , "É " , "Ê " , "Ì " , "Í " , "Ò " ,
16+ "Ó " , "Ô " , "Õ " , "Ù " , "Ú " , "Ý " , "à " , "á " , "â " , "ã " ,
17+ "è " , "é " , "ê " , "ì " , "í " , "ò " , "ó " , "ô " , "õ " , "ù " ,
18+ "ú " , "ý " , "Ă " , "ă " , "Đ " , "đ " , "Ĩ " , "ĩ " , "Ũ " , "ũ " ,
19+ "Ơ " , "ơ " , "Ư " , "ư " , "Ạ " , "ạ " , "Ả " , "ả " , "Ấ " , "ấ " ,
20+ "Ầ " , "ầ " , "Ẩ " , "ẩ " , "Ẫ " , "ẫ " , "Ậ " , "ậ " , "Ắ " , "ắ " ,
21+ "Ằ " , "ằ " , "Ẳ " , "ẳ " , "Ẵ " , "ẵ " , "Ặ " , "ặ " , "Ẹ " , "ẹ " ,
22+ "Ẻ " , "ẻ " , "Ẽ " , "ẽ " , "Ế " , "ế " , "Ề " , "ề " , "Ể " , "ể " ,
23+ "Ễ " , "ễ " , "Ệ " , "ệ " , "Ỉ " , "ỉ " , "Ị " , "ị " , "Ọ " , "ọ " ,
24+ "Ỏ " , "ỏ " , "Ố " , "ố " , "Ồ " , "ồ " , "Ổ " , "ổ " , "Ỗ " , "ỗ " ,
25+ "Ộ " , "ộ " , "Ớ " , "ớ " , "Ờ " , "ờ " , "Ở " , "ở " , "Ỡ " , "ỡ " ,
26+ "Ợ " , "ợ " , "Ụ " , "ụ " , "Ủ " , "ủ " , "Ứ " , "ứ " , "Ừ " , "ừ " ,
27+ "Ử " , "ử " , "Ữ " , "ữ " , "Ự " , "ự " , "Ỳ " , "ỳ " , "Ỵ " , "ỵ " ,
28+ "Ỷ " , "ỷ " , "Ỹ " , "ỹ " , ". "
29+ ),
30+ Code::CHARSET_VNI_WIN => array (
31+ "AØ " , "AÙ " , "AÂ " , "AÕ " , "EØ " , "EÙ " , "EÂ " , "Ì " , "Í " , "OØ " ,
32+ "OÙ " , "OÂ " , "OÕ " , "UØ " , "UÙ " , "YÙ " , "aø " , "aù " , "aâ " , "aõ " ,
33+ "eø " , "eù " , "eâ " , "ì " , "í " , "oø " , "où " , "oâ " , "oõ " , "uø " ,
34+ "uù " , "yù " , "AÊ " , "aê " , "Ñ " , "ñ " , "Ó " , "ó " , "UÕ " , "uõ " ,
35+ "Ô " , "ô " , "Ö " , "ö " , "AÏ " , "aï " , "AÛ " , "aû " , "AÁ " , "aá " ,
36+ "AÀ " , "aà " , "AÅ " , "aå " , "AÃ " , "aã " , "AÄ " , "aä " , "AÉ " , "aé " ,
37+ "AÈ " , "aè " , "AÚ " , "aú " , "AÜ " , "aü " , "AË " , "aë " , "EÏ " , "eï " ,
38+ "EÛ " , "eû " , "EÕ " , "eõ " , "EÁ " , "eá " , "EÀ " , "eà " , "EÅ " , "eå " ,
39+ "EÃ " , "eã " , "EÄ " , "eä " , "Æ " , "æ " , "Ò " , "ò " , "OÏ " , "oï " ,
40+ "OÛ " , "oû " , "OÁ " , "oá " , "OÀ " , "oà " , "OÅ " , "oå " , "OÃ " , "oã " ,
41+ "OÄ " , "oä " , "ÔÙ " , "ôù " , "ÔØ " , "ôø " , "ÔÛ " , "ôû " , "ÔÕ " , "ôõ " ,
42+ "ÔÏ " , "ôï " , "UÏ " , "uï " , "UÛ " , "uû " , "ÖÙ " , "öù " , "ÖØ " , "öø " ,
43+ "ÖÛ " , "öû " , "ÖÕ " , "öõ " , "ÖÏ " , "öï " , "YØ " , "yø " , "Î " , "î " ,
44+ "YÛ " , "yû " , "YÕ " , "yõ " , ". "
45+ ),
46+ Code::CHARSET_TCVN3 => array (
47+ "Aµ " , "A¸ " , "¢ " , "A· " , "EÌ " , "EÐ " , "£ " , "I× " , "IÝ " , "Oß " ,
48+ "Oã " , "¤ " , "Oâ " , "Uï " , "Uó " , "Yý " , "µ " , "¸ " , "© " , "· " ,
49+ "Ì " , "Ð " , "ª " , "× " , "Ý " , "ß " , "ã " , "« " , "â " , "ï " ,
50+ "ó " , "ý " , "¡ " , "¨ " , "§ " , "® " , "IÜ " , "Ü " , "Uò " , "ò " ,
51+ "¥ " , "¬ " , "¦ " , " " , "A¹ " , "¹ " , "A¶ " , "¶ " , "¢Ê " , "Ê " ,
52+ "¢Ç " , "Ç " , "¢È " , "È " , "¢É " , "É " , "¢Ë " , "Ë " , "¡¾ " , "¾ " ,
53+ "¡» " , "» " , "¡¼ " , "¼ " , "¡½ " , "½ " , "¡Æ " , "Æ " , "EÑ " , "Ñ " ,
54+ "EÎ " , "Î " , "EÏ " , "Ï " , "£Õ " , "Õ " , "£Ò " , "Ò " , "£Ó " , "Ó " ,
55+ "£Ô " , "Ô " , "£Ö " , "Ö " , "IØ " , "Ø " , "IÞ " , "Þ " , "Oä " , "ä " ,
56+ "Oá " , "á " , "¤è " , "è " , "¤å " , "å " , "¤æ " , "æ " , "¤ç " , "ç " ,
57+ "¤é " , "é " , "¥í " , "í " , "¥ê " , "ê " , "¥ë " , "ë " , "¥ì " , "ì " ,
58+ "¥î " , "î " , "Uô " , "ô " , "Uñ " , "ñ " , "¦ø " , "ø " , "¦õ " , "õ " ,
59+ "¦ö " , "ö " , "¦÷ " , "÷ " , "¦ù " , "ù " , "Yú " , "ú " , "Yþ " , "þ " ,
60+ "Yû " , "û " , "Yü " , "ü " , ". "
61+ ),
62+ Code::CHARSET_VIQR => array (
63+ "A` " , "A' " , "A^ " , "A~ " , "E` " , "E' " , "E^ " , "I` " , "I' " , "O` " ,
64+ "O' " , "O^ " , "O~ " , "U` " , "U' " , "Y' " , "a` " , "a' " , "a^ " , "a~ " ,
65+ "e` " , "e' " , "e^ " , "i` " , "i' " , "o` " , "o' " , "o^ " , "o~ " , "u` " ,
66+ "u' " , "y' " , "A( " , "a( " , "DD " , "dd " , "I~ " , "i~ " , "U~ " , "u~ " ,
67+ "O+ " , "o+ " , "U+ " , "u+ " , "A. " , "a. " , "A? " , "a? " , "A^' " , "a^' " ,
68+ "A^` " , "a^` " , "A^? " , "a^? " , "A^~ " , "a^~ " , "A^. " , "a^. " , "A(' " , "a(' " ,
69+ "A(` " , "a(` " , "A(? " , "a(? " , "A(~ " , "a(~ " , "A(. " , "a(. " , "E. " , "e. " ,
70+ "E? " , "e? " , "E~ " , "e~ " , "E^' " , "e^' " , "E^` " , "e^` " , "E^? " , "e^? " ,
71+ "E^~ " , "e^~ " , "E^. " , "e^. " , "I? " , "i? " , "I. " , "i. " , "O. " , "o. " ,
72+ "O? " , "o? " , "O^' " , "o^' " , "O^` " , "o^` " , "O^? " , "o^? " , "O^~ " , "o^~ " ,
73+ "O^. " , "o^. " , "O+' " , "o+' " , "O+` " , "o+` " , "O+? " , "o+? " , "O+~ " , "o+~ " ,
74+ "O+. " , "o+. " , "U. " , "u. " , "U? " , "u? " , "U+' " , "u+' " , "U+` " , "u+` " ,
75+ "U+? " , "u+? " , "U+~ " , "u+~ " , "U+. " , "u+. " , "Y` " , "y` " , "Y. " , "y. " ,
76+ "Y? " , "y? " , "Y~ " , "y~ " , "\\. "
77+ ),
78+ );
79+
80+ public static function changeEncode ($ string , $ targetEncode , $ sourceEncode = null ){
81+ if (!Detector::isSupported ($ targetEncode )){
82+ throw new EncodeException ("Không hỗ trợ chuyển sang bảng mã " . $ targetEncode );
83+ }
84+ if ($ sourceEncode !== null ){
85+ if (!Detector::isSupported ($ sourceEncode )) {
86+ throw new EncodeException ( "Không hỗ trợ chuyển từ bảng mã " . $ sourceEncode );
87+ }
88+ }else {
89+ $ sourceEncode = Detector::usingCode ($ string );
90+ if (!$ sourceEncode ){
91+ throw new UnknowCodeException ("Không xác định được bảng mã đang dùng của văn bản " );
92+ }
93+ }
94+
95+ if ($ targetEncode === $ sourceEncode ){
96+ return $ string ;
97+ }
98+
99+ $ targetCharSet = self ::$ maps [ $ targetEncode ];
100+ $ sourceCharSet = self ::$ maps [ $ sourceEncode ];
101+
102+ $ count = count ($ targetCharSet ) - 1 ;
103+ for ($ i = $ count ; $ i > 0 ; $ i --)
104+ {
105+ $ char = $ sourceCharSet [$ i ];
106+ $ string = str_replace ($ char , ':: ' .$ i .':: ' , $ string );
107+ }
108+ for ($ i = $ count ; $ i > 0 ; $ i --)
109+ {
110+ $ char = $ targetCharSet [$ i ];
111+ $ string = str_replace (':: ' .$ i .':: ' , $ char , $ string );
112+ }
113+
114+ return $ string ;//strtr( $string, $parse_array );
115+ }
116+ }
0 commit comments