zend-blog-3-backend

Форк
0
/
EmojiFlagSymbol.php 
61 строка · 1.5 Кб
1
<?php
2

3
namespace App\Utils;
4

5
use InvalidArgumentException;
6

7
/**
8
 * Class EmojiFlagSymbol
9
 *
10
 * Examples:
11
 * https://emojipedia.org/flags/
12
 * https://apps.timwhitlock.info/unicode/inspect/hex/1F1F2/1F1E9
13
 */
14
class EmojiFlagSymbol
15
{
16
    /**
17
     * The number by which to offset the character code to get the regional indicator
18
     *
19
     * @var int
20
     */
21
    private const INDICATOR_OFFSET = 127397;
22

23
    /**
24
     * @param string|null $countryCode
25
     *
26
     * @return string
27
     */
28
    public static function get(string $countryCode = null): string
29
    {
30
        if ($countryCode === '-') {
31
            // Pirate Flag Emoji
32
            return hex2bin('F09F8FB4E2808DE298A0EFB88F');
33
        }
34

35
        if (is_null($countryCode) || strlen($countryCode) !== 2) {
36
            throw new InvalidArgumentException('Please provide a 2 character country code.');
37
        }
38

39
        $countryCode = strtoupper($countryCode);
40

41
        return implode(
42
            '',
43
            array_map(
44
                [__CLASS__, 'convertChar'],
45
                str_split($countryCode)
46
            )
47
        );
48
    }
49

50
    private static function convertChar(string $char): string
51
    {
52
        $codepoint = self::INDICATOR_OFFSET + ord($char);
53

54
        $byte0 = 0b10000000 + ($codepoint & 0b111111);
55
        $byte1 = 0b10000000 + (($codepoint >> 6) & 0b111111);
56
        $byte2 = 0b10000000 + (($codepoint >> 12) & 0b111111);
57
        $byte3 = 0b11110000 + (($codepoint >> 18) & 0b111);
58

59
        return chr($byte3) . chr($byte2) . chr($byte1) . chr($byte0);
60
    }
61
}
62

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.