Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 112 |
|
0.00% |
0 / 3 |
CRAP | |
0.00% |
0 / 1 |
ChainManipulator | |
0.00% |
0 / 112 |
|
0.00% |
0 / 3 |
210 | |
0.00% |
0 / 1 |
removeAllNonAlphaNumericChar | |
0.00% |
0 / 11 |
|
0.00% |
0 / 1 |
110 | |||
removeAccents | |
0.00% |
0 / 98 |
|
0.00% |
0 / 1 |
6 | |||
extractUuidFromString | |
0.00% |
0 / 3 |
|
0.00% |
0 / 1 |
6 |
1 | <?php |
2 | |
3 | namespace App\Domain\Tools; |
4 | |
5 | class ChainManipulator |
6 | { |
7 | public static function removeAllNonAlphaNumericChar(string $chain, string $replacingChar = '_') |
8 | { |
9 | $asciiFilename = ''; |
10 | $encoding = mb_detect_encoding($chain, null, true) ?: '8bit'; |
11 | |
12 | for ($i = 0, $filenameLength = mb_strlen($chain, $encoding); $i < $filenameLength; ++$i) { |
13 | $char = mb_substr($chain, $i, 1, $encoding); |
14 | |
15 | // remove all character is not alphanumeric base on ascii table |
16 | // ascii table https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html |
17 | if ((\ord($char) < 48 || \ord($char) > 57) |
18 | && (\ord($char) < 65 || \ord($char) > 90) |
19 | && (\ord($char) < 97 || \ord($char) > 123) |
20 | ) { |
21 | if ($replacingChar !== substr($asciiFilename, -1)) { |
22 | $asciiFilename .= $replacingChar; |
23 | } |
24 | } else { |
25 | $asciiFilename .= $char; |
26 | } |
27 | } |
28 | |
29 | return $asciiFilename; |
30 | } |
31 | |
32 | public static function removeAccents($string) |
33 | { |
34 | if (!preg_match('/[\x80-\xff]/', $string)) { |
35 | return $string; |
36 | } |
37 | $chars = [ |
38 | // Decompositions for Latin-1 Supplement |
39 | chr(195) . chr(128) => 'A', chr(195) . chr(129) => 'A', |
40 | chr(195) . chr(130) => 'A', chr(195) . chr(131) => 'A', |
41 | chr(195) . chr(132) => 'A', chr(195) . chr(133) => 'A', |
42 | chr(195) . chr(135) => 'C', chr(195) . chr(136) => 'E', |
43 | chr(195) . chr(137) => 'E', chr(195) . chr(138) => 'E', |
44 | chr(195) . chr(139) => 'E', chr(195) . chr(140) => 'I', |
45 | chr(195) . chr(141) => 'I', chr(195) . chr(142) => 'I', |
46 | chr(195) . chr(143) => 'I', chr(195) . chr(145) => 'N', |
47 | chr(195) . chr(146) => 'O', chr(195) . chr(147) => 'O', |
48 | chr(195) . chr(148) => 'O', chr(195) . chr(149) => 'O', |
49 | chr(195) . chr(150) => 'O', chr(195) . chr(153) => 'U', |
50 | chr(195) . chr(154) => 'U', chr(195) . chr(155) => 'U', |
51 | chr(195) . chr(156) => 'U', chr(195) . chr(157) => 'Y', |
52 | chr(195) . chr(159) => 's', chr(195) . chr(160) => 'a', |
53 | chr(195) . chr(161) => 'a', chr(195) . chr(162) => 'a', |
54 | chr(195) . chr(163) => 'a', chr(195) . chr(164) => 'a', |
55 | chr(195) . chr(165) => 'a', chr(195) . chr(167) => 'c', |
56 | chr(195) . chr(168) => 'e', chr(195) . chr(169) => 'e', |
57 | chr(195) . chr(170) => 'e', chr(195) . chr(171) => 'e', |
58 | chr(195) . chr(172) => 'i', chr(195) . chr(173) => 'i', |
59 | chr(195) . chr(174) => 'i', chr(195) . chr(175) => 'i', |
60 | chr(195) . chr(177) => 'n', chr(195) . chr(178) => 'o', |
61 | chr(195) . chr(179) => 'o', chr(195) . chr(180) => 'o', |
62 | chr(195) . chr(181) => 'o', chr(195) . chr(182) => 'o', |
63 | chr(195) . chr(182) => 'o', chr(195) . chr(185) => 'u', |
64 | chr(195) . chr(186) => 'u', chr(195) . chr(187) => 'u', |
65 | chr(195) . chr(188) => 'u', chr(195) . chr(189) => 'y', |
66 | chr(195) . chr(191) => 'y', |
67 | // Decompositions for Latin Extended-A |
68 | chr(196) . chr(128) => 'A', chr(196) . chr(129) => 'a', |
69 | chr(196) . chr(130) => 'A', chr(196) . chr(131) => 'a', |
70 | chr(196) . chr(132) => 'A', chr(196) . chr(133) => 'a', |
71 | chr(196) . chr(134) => 'C', chr(196) . chr(135) => 'c', |
72 | chr(196) . chr(136) => 'C', chr(196) . chr(137) => 'c', |
73 | chr(196) . chr(138) => 'C', chr(196) . chr(139) => 'c', |
74 | chr(196) . chr(140) => 'C', chr(196) . chr(141) => 'c', |
75 | chr(196) . chr(142) => 'D', chr(196) . chr(143) => 'd', |
76 | chr(196) . chr(144) => 'D', chr(196) . chr(145) => 'd', |
77 | chr(196) . chr(146) => 'E', chr(196) . chr(147) => 'e', |
78 | chr(196) . chr(148) => 'E', chr(196) . chr(149) => 'e', |
79 | chr(196) . chr(150) => 'E', chr(196) . chr(151) => 'e', |
80 | chr(196) . chr(152) => 'E', chr(196) . chr(153) => 'e', |
81 | chr(196) . chr(154) => 'E', chr(196) . chr(155) => 'e', |
82 | chr(196) . chr(156) => 'G', chr(196) . chr(157) => 'g', |
83 | chr(196) . chr(158) => 'G', chr(196) . chr(159) => 'g', |
84 | chr(196) . chr(160) => 'G', chr(196) . chr(161) => 'g', |
85 | chr(196) . chr(162) => 'G', chr(196) . chr(163) => 'g', |
86 | chr(196) . chr(164) => 'H', chr(196) . chr(165) => 'h', |
87 | chr(196) . chr(166) => 'H', chr(196) . chr(167) => 'h', |
88 | chr(196) . chr(168) => 'I', chr(196) . chr(169) => 'i', |
89 | chr(196) . chr(170) => 'I', chr(196) . chr(171) => 'i', |
90 | chr(196) . chr(172) => 'I', chr(196) . chr(173) => 'i', |
91 | chr(196) . chr(174) => 'I', chr(196) . chr(175) => 'i', |
92 | chr(196) . chr(176) => 'I', chr(196) . chr(177) => 'i', |
93 | chr(196) . chr(178) => 'IJ', chr(196) . chr(179) => 'ij', |
94 | chr(196) . chr(180) => 'J', chr(196) . chr(181) => 'j', |
95 | chr(196) . chr(182) => 'K', chr(196) . chr(183) => 'k', |
96 | chr(196) . chr(184) => 'k', chr(196) . chr(185) => 'L', |
97 | chr(196) . chr(186) => 'l', chr(196) . chr(187) => 'L', |
98 | chr(196) . chr(188) => 'l', chr(196) . chr(189) => 'L', |
99 | chr(196) . chr(190) => 'l', chr(196) . chr(191) => 'L', |
100 | chr(197) . chr(128) => 'l', chr(197) . chr(129) => 'L', |
101 | chr(197) . chr(130) => 'l', chr(197) . chr(131) => 'N', |
102 | chr(197) . chr(132) => 'n', chr(197) . chr(133) => 'N', |
103 | chr(197) . chr(134) => 'n', chr(197) . chr(135) => 'N', |
104 | chr(197) . chr(136) => 'n', chr(197) . chr(137) => 'N', |
105 | chr(197) . chr(138) => 'n', chr(197) . chr(139) => 'N', |
106 | chr(197) . chr(140) => 'O', chr(197) . chr(141) => 'o', |
107 | chr(197) . chr(142) => 'O', chr(197) . chr(143) => 'o', |
108 | chr(197) . chr(144) => 'O', chr(197) . chr(145) => 'o', |
109 | chr(197) . chr(146) => 'OE', chr(197) . chr(147) => 'oe', |
110 | chr(197) . chr(148) => 'R', chr(197) . chr(149) => 'r', |
111 | chr(197) . chr(150) => 'R', chr(197) . chr(151) => 'r', |
112 | chr(197) . chr(152) => 'R', chr(197) . chr(153) => 'r', |
113 | chr(197) . chr(154) => 'S', chr(197) . chr(155) => 's', |
114 | chr(197) . chr(156) => 'S', chr(197) . chr(157) => 's', |
115 | chr(197) . chr(158) => 'S', chr(197) . chr(159) => 's', |
116 | chr(197) . chr(160) => 'S', chr(197) . chr(161) => 's', |
117 | chr(197) . chr(162) => 'T', chr(197) . chr(163) => 't', |
118 | chr(197) . chr(164) => 'T', chr(197) . chr(165) => 't', |
119 | chr(197) . chr(166) => 'T', chr(197) . chr(167) => 't', |
120 | chr(197) . chr(168) => 'U', chr(197) . chr(169) => 'u', |
121 | chr(197) . chr(170) => 'U', chr(197) . chr(171) => 'u', |
122 | chr(197) . chr(172) => 'U', chr(197) . chr(173) => 'u', |
123 | chr(197) . chr(174) => 'U', chr(197) . chr(175) => 'u', |
124 | chr(197) . chr(176) => 'U', chr(197) . chr(177) => 'u', |
125 | chr(197) . chr(178) => 'U', chr(197) . chr(179) => 'u', |
126 | chr(197) . chr(180) => 'W', chr(197) . chr(181) => 'w', |
127 | chr(197) . chr(182) => 'Y', chr(197) . chr(183) => 'y', |
128 | chr(197) . chr(184) => 'Y', chr(197) . chr(185) => 'Z', |
129 | chr(197) . chr(186) => 'z', chr(197) . chr(187) => 'Z', |
130 | chr(197) . chr(188) => 'z', chr(197) . chr(189) => 'Z', |
131 | chr(197) . chr(190) => 'z', chr(197) . chr(191) => 's', |
132 | ]; |
133 | |
134 | $string = strtr($string, $chars); |
135 | |
136 | return $string; |
137 | } |
138 | |
139 | public static function extractUuidFromString(?string $string) |
140 | { |
141 | $res = []; |
142 | preg_match('/[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/', $string, $res); |
143 | |
144 | return empty($res) ? null : $res[0]; |
145 | } |
146 | } |