1<?php
2/**
3 * Created by PhpStorm.
4 * User: Chad
5 * Date: 1/1/2018
6 * Time: 9:28 PM
7 */
8
9namespace FreeDSx\Ldap;
10
11/**
12 * Some common methods for LDAP URLs and URL Extensions.
13 *
14 * @author Chad Sikorra <Chad.Sikorra@gmail.com>
15 */
16trait LdapUrlTrait
17{
18    /**
19     * @var array
20     */
21    protected static $escapeMap = [
22        '%' => '%25',
23        '?' => '%3f',
24        ' ' => '%20',
25        '<' => '%3c',
26        '>' => '%3e',
27        '"' => '%22',
28        '#' => '%23',
29        '{' => '%7b',
30        '}' => '%7d',
31        '|' => '%7c',
32        '\\' => '%5c',
33        '^' => '%5e',
34        '~' => '%7e',
35        '[' => '%5b',
36        ']' => '%5d',
37        '`' => '%60',
38    ];
39
40    /**
41     * Percent-encode certain values in the URL.
42     *
43     * @param string $value
44     * @return string
45     */
46    protected static function encode(?string $value): string
47    {
48        return \str_replace(
49            \array_keys(self::$escapeMap),
50            \array_values(self::$escapeMap),
51            (string) $value
52        );
53    }
54
55    /**
56     * Percent-decode values from the URL.
57     *
58     * @param string $value
59     * @return string
60     */
61    protected static function decode(string $value): string
62    {
63        return \str_ireplace(
64            \array_values(self::$escapeMap),
65            \array_keys(self::$escapeMap),
66            $value
67        );
68    }
69}
70