Util::detectUTFEncoding()   A
last analyzed

Complexity

Conditions 6
Paths 6

Size

Total Lines 22
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 6.6829

Importance

Changes 0
Metric Value
eloc 14
c 0
b 0
f 0
dl 0
loc 22
ccs 11
cts 15
cp 0.7332
rs 9.2222
cc 6
nc 6
nop 1
crap 6.6829
1
<?php
2
3
namespace App\Services;
4
5
class Util
6
{
7 17
    public function __construct()
8
    {
9 17
        defined('UTF8_BOM') || define('UTF8_BOM', chr(0xEF).chr(0xBB).chr(0xBF));
10 17
        defined('UTF16_LITTLE_ENDIAN_BOM') || define('UTF16_LITTLE_ENDIAN_BOM', chr(0xFF).chr(0xFE));
11 17
        defined('UTF16_BIG_ENDIAN_BOM') || define('UTF16_BIG_ENDIAN_BOM', chr(0xFE).chr(0xFF));
12 17
        defined('UTF32_LITTLE_ENDIAN_BOM') || define('UTF32_LITTLE_ENDIAN_BOM', chr(0xFF).chr(0xFE).chr(0x00).chr(0x00));
13 17
        defined('UTF32_BIG_ENDIAN_BOM') || define('UTF32_BIG_ENDIAN_BOM', chr(0x00).chr(0x00).chr(0xFE).chr(0xFF));
14 17
    }
15
16
    /**
17
     * Detects higher UTF encoded strings.
18
     */
19 17
    public function detectUTFEncoding(string $str): ?string
20
    {
21 17
        switch (substr($str, 0, 2)) {
22 17
            case UTF16_BIG_ENDIAN_BOM:
23
                return 'UTF-16BE';
24 17
            case UTF16_LITTLE_ENDIAN_BOM:
25 1
                return 'UTF-16LE';
26
        }
27
28 16
        switch (substr($str, 0, 3)) {
29 16
            case UTF8_BOM:
30
                return 'UTF-8';
31
        }
32
33 16
        switch (substr($str, 0, 4)) {
34 16
            case UTF32_BIG_ENDIAN_BOM:
35
                return 'UTF-32BE';
36 16
            case UTF32_LITTLE_ENDIAN_BOM:
37
                return 'UTF-32LE';
38
        }
39
40 16
        return null;
41
    }
42
}
43