Mercurial > nebulaweb3
comparison default/assets/vendors/theme-widgets/vendor/abraham/twitteroauth/src/Util.php @ 0:1d038bc9b3d2 default tip
Up:default
author | Liny <dev@neowd.com> |
---|---|
date | Sat, 31 May 2025 09:21:51 +0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:1d038bc9b3d2 |
---|---|
1 <?php | |
2 /** | |
3 * The MIT License | |
4 * Copyright (c) 2007 Andy Smith | |
5 */ | |
6 namespace Abraham\TwitterOAuth; | |
7 | |
8 class Util | |
9 { | |
10 /** | |
11 * @param $input | |
12 * | |
13 * @return array|mixed|string | |
14 */ | |
15 public static function urlencodeRfc3986($input) | |
16 { | |
17 $output = ''; | |
18 if (is_array($input)) { | |
19 $output = array_map([__NAMESPACE__ . '\Util', 'urlencodeRfc3986'], $input); | |
20 } elseif (is_scalar($input)) { | |
21 $output = rawurlencode($input); | |
22 } | |
23 return $output; | |
24 } | |
25 | |
26 /** | |
27 * @param string $string | |
28 * | |
29 * @return string | |
30 */ | |
31 public static function urldecodeRfc3986($string) | |
32 { | |
33 return urldecode($string); | |
34 } | |
35 | |
36 /** | |
37 * This function takes a input like a=b&a=c&d=e and returns the parsed | |
38 * parameters like this | |
39 * array('a' => array('b','c'), 'd' => 'e') | |
40 * | |
41 * @param string $input | |
42 * | |
43 * @return array | |
44 */ | |
45 public static function parseParameters($input) | |
46 { | |
47 if (!is_string($input)) { | |
48 return []; | |
49 } | |
50 | |
51 $pairs = explode('&', $input); | |
52 | |
53 $parameters = []; | |
54 foreach ($pairs as $pair) { | |
55 $split = explode('=', $pair, 2); | |
56 $parameter = Util::urldecodeRfc3986($split[0]); | |
57 $value = isset($split[1]) ? Util::urldecodeRfc3986($split[1]) : ''; | |
58 | |
59 if (isset($parameters[$parameter])) { | |
60 // We have already recieved parameter(s) with this name, so add to the list | |
61 // of parameters with this name | |
62 | |
63 if (is_scalar($parameters[$parameter])) { | |
64 // This is the first duplicate, so transform scalar (string) into an array | |
65 // so we can add the duplicates | |
66 $parameters[$parameter] = [$parameters[$parameter]]; | |
67 } | |
68 | |
69 $parameters[$parameter][] = $value; | |
70 } else { | |
71 $parameters[$parameter] = $value; | |
72 } | |
73 } | |
74 return $parameters; | |
75 } | |
76 | |
77 /** | |
78 * @param array $params | |
79 * | |
80 * @return string | |
81 */ | |
82 public static function buildHttpQuery(array $params) | |
83 { | |
84 if (empty($params)) { | |
85 return ''; | |
86 } | |
87 | |
88 // Urlencode both keys and values | |
89 $keys = Util::urlencodeRfc3986(array_keys($params)); | |
90 $values = Util::urlencodeRfc3986(array_values($params)); | |
91 $params = array_combine($keys, $values); | |
92 | |
93 // Parameters are sorted by name, using lexicographical byte value ordering. | |
94 // Ref: Spec: 9.1.1 (1) | |
95 uksort($params, 'strcmp'); | |
96 | |
97 $pairs = []; | |
98 foreach ($params as $parameter => $value) { | |
99 if (is_array($value)) { | |
100 // If two or more parameters share the same name, they are sorted by their value | |
101 // Ref: Spec: 9.1.1 (1) | |
102 // June 12th, 2010 - changed to sort because of issue 164 by hidetaka | |
103 sort($value, SORT_STRING); | |
104 foreach ($value as $duplicateValue) { | |
105 $pairs[] = $parameter . '=' . $duplicateValue; | |
106 } | |
107 } else { | |
108 $pairs[] = $parameter . '=' . $value; | |
109 } | |
110 } | |
111 // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) | |
112 // Each name-value pair is separated by an '&' character (ASCII code 38) | |
113 return implode('&', $pairs); | |
114 } | |
115 } |