Skip to content

Commit ec1db47

Browse files
committed
init with demo
0 parents  commit ec1db47

File tree

13 files changed

+436
-0
lines changed

13 files changed

+436
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Created by .ignore support plugin (hsz.mobi)
2+
vendor
3+
.idea

composer.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"name": "vuthaihoc/vi_encoder",
3+
"description": "Chuyển đổi qua lại giữa một số định dạng bảng mã Việt Nam",
4+
"minimum-stability": "stable",
5+
"keywords" : ["laravel", "encoder", "unicode", "tcvn3", "viqr", "vni-windows"],
6+
"license": "MIT",
7+
"authors": [
8+
{
9+
"name": "Vũ Thái Học",
10+
"email": "[email protected]"
11+
}
12+
],
13+
"autoload": {
14+
"psr-4": {
15+
"StupidDev\\ViEncoder\\": "src/"
16+
}
17+
}
18+
}

demo/test.php

Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: hocvt
5+
* Date: 7/11/16
6+
* Time: 10:20
7+
*/
8+
9+
ini_set('display_errors', 1);
10+
11+
require '../vendor/autoload.php';
12+
13+
14+
use StupidDev\ViEncoder\Encoder\Converter;
15+
use StupidDev\ViEncoder\Encoder\Code;
16+
17+
18+
$tcvn3 = file_get_contents(__DIR__ . "/text/tcvn3.txt");
19+
$vni = file_get_contents(__DIR__ . "/text/vni.txt");
20+
$unicode = file_get_contents(__DIR__ . "/text/unicode.txt");
21+
$viqr = file_get_contents(__DIR__ . "/text/viqr.txt");
22+
23+
$output = [
24+
'from_tcvn3' => [
25+
'unicode' => Converter::changeEncode($tcvn3, Code::CHARSET_UNICODE),
26+
'vni' => Converter::changeEncode($tcvn3, Code::CHARSET_VNI_WIN),
27+
'viqr' => Converter::changeEncode($tcvn3, Code::CHARSET_VIQR),
28+
'tcvn3' => Converter::changeEncode($tcvn3, Code::CHARSET_TCVN3),
29+
],
30+
'from_vni' => [
31+
'unicode' => Converter::changeEncode($vni, Code::CHARSET_UNICODE),
32+
'vni' => Converter::changeEncode($vni, Code::CHARSET_VNI_WIN),
33+
'viqr' => Converter::changeEncode($vni, Code::CHARSET_VIQR),
34+
'tcvn3' => Converter::changeEncode($vni, Code::CHARSET_TCVN3),
35+
],
36+
'from_viqr' => [
37+
'unicode' => Converter::changeEncode($viqr, Code::CHARSET_UNICODE),
38+
'vni' => Converter::changeEncode($viqr, Code::CHARSET_VNI_WIN),
39+
'viqr' => Converter::changeEncode($viqr, Code::CHARSET_VIQR),
40+
'tcvn3' => Converter::changeEncode($viqr, Code::CHARSET_TCVN3),
41+
],
42+
'from_unicode' => [
43+
'unicode' => Converter::changeEncode($unicode, Code::CHARSET_UNICODE),
44+
'vni' => Converter::changeEncode($unicode, Code::CHARSET_VNI_WIN, Code::CHARSET_UNICODE),
45+
'viqr' => Converter::changeEncode($unicode, Code::CHARSET_VIQR, Code::CHARSET_UNICODE),
46+
'tcvn3' => Converter::changeEncode($unicode, Code::CHARSET_TCVN3, Code::CHARSET_UNICODE),
47+
]
48+
];
49+
50+
?>
51+
<div>
52+
<div style="width: 25%; float:left;">
53+
From TCVN3<br/>
54+
<?php echo $tcvn3; ?>
55+
</div>
56+
<div style="width: 25%; float:left;">
57+
From VNI<br/>
58+
<?php echo $vni; ?>
59+
</div>
60+
<div style="width: 25%; float:left;">
61+
From VIQR<br/>
62+
<?php echo $viqr; ?>
63+
</div>
64+
<div style="width: 25%; float:left;">
65+
From UNICODE<br/>
66+
<?php echo $unicode; ?>
67+
</div>
68+
</div>
69+
<h4>Unicode</h4>
70+
<div>
71+
<div style="width: 25%; float:left;">
72+
<?php echo $output['from_tcvn3']['unicode'] ?>
73+
</div>
74+
<div style="width: 25%; float:left;">
75+
<?php echo $output['from_vni']['unicode'] ?>
76+
</div>
77+
<div style="width: 25%; float:left;">
78+
<?php echo $output['from_viqr']['unicode'] ?>
79+
</div>
80+
<div style="width: 25%; float:left;">
81+
<?php echo $output['from_unicode']['unicode'] ?>
82+
</div>
83+
</div>
84+
<h4>VNI</h4>
85+
<div>
86+
<div style="width: 25%; float:left;">
87+
<?php echo $output['from_tcvn3']['vni'] ?>
88+
</div>
89+
<div style="width: 25%; float:left;">
90+
<?php echo $output['from_vni']['vni'] ?>
91+
</div>
92+
<div style="width: 25%; float:left;">
93+
<?php echo $output['from_viqr']['vni'] ?>
94+
</div>
95+
<div style="width: 25%; float:left;">
96+
<?php echo $output['from_unicode']['vni'] ?>
97+
</div>
98+
</div>
99+
<h4>VIQR</h4>
100+
<div>
101+
<div style="width: 25%; float:left;">
102+
<?php echo $output['from_tcvn3']['viqr'] ?>
103+
</div>
104+
<div style="width: 25%; float:left;">
105+
<?php echo $output['from_vni']['viqr'] ?>
106+
</div>
107+
<div style="width: 25%; float:left;">
108+
<?php echo $output['from_viqr']['viqr'] ?>
109+
</div>
110+
<div style="width: 25%; float:left;">
111+
<?php echo $output['from_unicode']['viqr'] ?>
112+
</div>
113+
</div>
114+
<h4>TCVN3</h4>
115+
<div>
116+
<div style="width: 25%; float:left;">
117+
<?php echo $output['from_tcvn3']['tcvn3'] ?>
118+
</div>
119+
<div style="width: 25%; float:left;">
120+
<?php echo $output['from_vni']['tcvn3'] ?>
121+
</div>
122+
<div style="width: 25%; float:left;">
123+
<?php echo $output['from_viqr']['tcvn3'] ?>
124+
</div>
125+
<div style="width: 25%; float:left;">
126+
<?php echo $output['from_unicode']['tcvn3'] ?>
127+
</div>
128+
</div>

demo/text/tcvn3.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
C¸c file nµy lµm nhiÖm vô khai b¸o râ rµng h¬n c¸c khai b¸o magic bªn trong Laravel. §Ó IDE(vÝ dô nh­ Sublime) cã thÓ hiÓu ®­îc vµ autocomplate khi code.
2+
Trong tr­êng hîp c¸c b¹n kh«ng thÓ ch¹y ®­îc hoÆc kh«ng muèn ch¹y ide-helper th× cã thÓ t¶i s½n c¸c file ®· ®­îc gen s½n(míi bao gåm mét sè hµm vµ Facade cã s½n trong Laravel)

demo/text/unicode.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Các file này làm nhiệm vụ khai báo rõ ràng hơn các khai báo magic bên trong Laravel. Để IDE(ví dụ như Sublime) có thể hiểu được và autocomplate khi code.
2+
Trong trường hợp các bạn không thể chạy được hoặc không muốn chạy ide-helper thì có thể tải sẵn các file đã được gen sẵn(mới bao gồm một số hàm và Facade có sẵn trong Laravel)

demo/text/viqr.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Ca'c file na`y la`m nhie^.m vu. khai ba'o ro~ ra`ng ho+n ca'c khai ba'o magic be^n trong Laravel\. DDe^? IDE(vi' du. nhu+ Sublime) co' the^? hie^?u ddu+o+.c va` autocomplate khi code\.
2+
Trong tru+o+`ng ho+.p ca'c ba.n kho^ng the^? cha.y ddu+o+.c hoa(.c kho^ng muo^'n cha.y ide-helper thi` co' the^? ta?i sa(~n ca'c file dda~ ddu+o+.c gen sa(~n(mo+'i bao go^`m mo^.t so^' ha`m va` Facade co' sa(~n trong Laravel)

demo/text/vni.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Caùc file naøy laøm nhieäm vuï khai baùo roõ raøng hôn caùc khai baùo magic beân trong Laravel. Ñeå IDE(ví duï nhö Sublime) coù theå hieåu ñöôïc vaø autocomplate khi code.
2+
Trong tröôøng hôïp caùc baïn khoâng theå chaïy ñöôïc hoaëc khoâng muoán chaïy ide-helper thì coù theå taûi saün caùc file ñaõ ñöôïc gen saün(môùi bao goàm moät soá haøm vaø Facade coù saün trong Laravel)

readme.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
## Code supported
2+
3+
private static $codes_supported = [
4+
"VIQR",
5+
"VPS-Win",
6+
"UNICODE",
7+
"TCVN-3"
8+
]
9+
10+
Kiểm tra có hỗ trợ hay không
11+
12+
Detector::isSupported($sourceEncode);
13+
14+
Detect bảng mã của đoạn văn
15+
16+
$using_code = Detector::usingCode($string);
17+
18+
## Chuyển đổi giữa các bảng mã
19+
20+
$new_string = Converter::changeEncode($string, $targetCode, [$sourceCode = null]);
21+
22+
`$targetCode``$sourceCode` có thể dùng cont của Code cho chuẩn xác
23+
tên bảng mã. `$sourceCode` bỏ trống thì hệ thống sẽ tự động nhận diện
24+
bảng mã `$string` đang dùng.
25+
26+
const CHARSET_TCVN3 = 'TCVN-3';
27+
const CHARSET_VNI_WIN = 'VNI-WIN';
28+
const CHARSET_VIQR = 'VIQR';
29+
const CHARSET_UNICODE = 'UNICODE';

src/Encoder/Code.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: hocvt
5+
* Date: 6/30/16
6+
* Time: 08:38
7+
*/
8+
9+
namespace StupidDev\ViEncoder\Encoder;
10+
11+
12+
class Code {
13+
const CHARSET_TCVN3 = 'TCVN-3';
14+
const CHARSET_VNI_WIN = 'VNI-WIN';
15+
const CHARSET_VIQR = 'VIQR';
16+
const CHARSET_UNICODE = 'UNICODE';
17+
// const CHARSET_VISCII = 'VISCII';
18+
// const CHARSET_VPS_WIN = 'VPS-Win';
19+
// const CHARSET_VIETWARE_F = 'VietWare-F';
20+
// const CHARSET_VIETWARE_X = 'VietWare-X';
21+
// const CHARSET_BKHCM1 = 'B.K. HCM 1';
22+
// const CHARSET_BKHCM2 = 'B.K. HCM 2';
23+
// const CHARSET_VNU = 'VNU';
24+
// const CHARSET_COMB_UNICODE = 'Comb Unicode';
25+
// const CHARSET_ESC_UNICODE = 'Esc Unicode';
26+
// const CHARSET_UTF8 = 'UTF-8';
27+
}

src/Encoder/Converter.php

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
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+
"", "", "", "", "", "", "", "Ì" , "Í" , "",
32+
"", "", "", "", "", "", "", "", "", "",
33+
"", "", "", "ì" , "í" , "", "", "", "", "",
34+
"", "", "", "", "Ñ" , "ñ" , "Ó" , "ó" , "", "",
35+
"Ô" , "ô" , "Ö" , "ö" , "", "", "", "", "", "",
36+
"", "", "", "", "", "", "", "", "", "",
37+
"", "", "", "", "", "", "", "", "", "",
38+
"", "", "", "", "", "", "", "", "", "",
39+
"", "", "", "", "Æ" , "æ" , "Ò" , "ò" , "", "",
40+
"", "", "", "", "", "", "", "", "", "",
41+
"", "", "ÔÙ", "ôù", "ÔØ", "ôø", "ÔÛ", "ôû", "ÔÕ", "ôõ",
42+
"ÔÏ", "ôï", "", "", "", "", "ÖÙ", "öù", "ÖØ", "öø",
43+
"ÖÛ", "öû", "ÖÕ", "öõ", "ÖÏ", "öï", "", "", "Î" , "î" ,
44+
"", "", "", "", "."
45+
),
46+
Code::CHARSET_TCVN3 => array(
47+
"", "", "¢" , "", "", "", "£" , "", "", "",
48+
"", "¤" , "", "", "", "", "µ" , "¸" , "©" , "·" ,
49+
"Ì" , "Ð" , "ª" , "×" , "Ý" , "ß" , "ã" , "«" , "â" , "ï" ,
50+
"ó" , "ý" , "¡" , "¨" , "§" , "®" , "", "Ü" , "", "ò" ,
51+
"¥" , "¬" , "¦" , "­" , "", "¹" , "", "" , "¢Ê", "Ê" ,
52+
"¢Ç", "Ç" , "¢È", "È" , "¢É", "É" , "¢Ë", "Ë" , "¡¾", "¾" ,
53+
"¡»", "»" , "¡¼", "¼" , "¡½", "½" , "¡Æ", "Æ" , "", "Ñ" ,
54+
"", "Î" , "", "Ï" , "£Õ", "Õ" , "£Ò", "Ò" , "£Ó", "Ó" ,
55+
"£Ô", "Ô" , "£Ö", "Ö" , "", "Ø" , "", "Þ" , "", "ä" ,
56+
"", "á" , "¤è", "è" , "¤å", "å" , "¤æ", "æ" , "¤ç", "ç" ,
57+
"¤é", "é" , "¥í", "í" , "¥ê", "ê" , "¥ë", "ë" , "¥ì", "ì" ,
58+
"¥î", "î" , "", "ô" , "", "ñ" , "¦ø", "ø" , "¦õ", "õ" ,
59+
"¦ö", "ö" , "¦÷", "÷" , "¦ù", "ù" , "", "ú" , "", "þ" ,
60+
"", "û" , "", "ü" , "."
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

Comments
 (0)