Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
6 / 6
CRAP
100.00% covered (success)
100.00%
1 / 1
UrlEncoding
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
6 / 6
10
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 createDefault
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 encodeUrl
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
3
 decodeUrl
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
3
 encode
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 decode
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3declare(strict_types=1);
4
5namespace PeServer\Core\Web;
6
7use PeServer\Core\Binary;
8use PeServer\Core\Encoding;
9use PeServer\Core\Web\UrlEncodeKind;
10
11/**
12 * URLエンコードを処理。
13 *
14 * URLエンコード処理と、処理後の文字列を対象の文字コードで云々する。
15 */
16readonly class UrlEncoding
17{
18    /**
19     * 生成。
20     *
21     * @param UrlEncodeKind $url URLエンコード種別
22     * @param Encoding $string 文字列エンコード種別
23     */
24    public function __construct(
25        public UrlEncodeKind $url,
26        public Encoding $string
27    ) {
28    }
29
30    #region function
31
32    public static function createDefault(): self
33    {
34        return new self(UrlEncodeKind::Rfc3986, Encoding::getDefaultEncoding());
35    }
36
37    /**
38     * URLエンコード。
39     *
40     * @param Binary $input
41     * @return string
42     * @see https://www.php.net/manual/function.urldecode.php
43     * @see https://www.php.net/manual/function.rawurldecode.php
44     */
45    public function encodeUrl(Binary $input): string
46    {
47        return match ($this->url) {
48            UrlEncodeKind::Rfc1738 => urlencode($input->raw),
49            UrlEncodeKind::Rfc3986 => rawurlencode($input->raw),
50        };
51    }
52
53    /**
54     * URLデコード。
55     *
56     * @param string $input
57     * @return Binary
58     * @see https://www.php.net/manual/function.urldecode.php
59     * @see https://www.php.net/manual/function.rawurldecode.php
60     */
61    public function decodeUrl(string $input): Binary
62    {
63        $raw = match ($this->url) {
64            UrlEncodeKind::Rfc1738 => urldecode($input),
65            UrlEncodeKind::Rfc3986 => rawurldecode($input),
66        };
67
68        return new Binary($raw);
69    }
70
71    /**
72     * 文字コード変換してURLエンコードを行う。
73     *
74     * @param string $value
75     * @return string
76     */
77    public function encode(string $value): string
78    {
79        $encodeString = $this->string->getBinary($value);
80        $encodeValue = $this->encodeUrl($encodeString);
81
82        return $encodeValue;
83    }
84
85    /**
86     * URLデコードして文字コード変換を行う。
87     *
88     * @param string $value
89     * @return string
90     */
91    public function decode(string $value): string
92    {
93        $decodeValue = $this->decodeUrl($value);
94        $decodeString = $this->string->toString($decodeValue);
95
96        return $decodeString;
97    }
98
99    #endregion
100}