Skip to content

Commit 5ddfaf1

Browse files
committed
Added Helpers::escape()
This reverts commit df4eef2.
1 parent 206328f commit 5ddfaf1

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed

src/DI/Helpers.php

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,27 @@ public static function expand($var, array $params, $recursive = false)
9898
}
9999

100100

101+
/**
102+
* Escapes '%' and '@'
103+
* @param mixed
104+
* @return mixed
105+
*/
106+
public static function escape($value)
107+
{
108+
if (is_array($value)) {
109+
$res = [];
110+
foreach ($value as $key => $val) {
111+
$key = is_string($key) ? str_replace('%', '%%', $key) : $key;
112+
$res[$key] = self::escape($val);
113+
}
114+
return $res;
115+
} elseif (is_string($value)) {
116+
return preg_replace('#^@|%#', '$0$0', $value);
117+
}
118+
return $value;
119+
}
120+
121+
101122
/**
102123
* Performs internal functions like not(), bool() ... recursively.
103124
*/

tests/DI/Helpers.escape().phpt

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
3+
/**
4+
* Test: Nette\DI\Helpers::escape()
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Nette\DI\Helpers;
10+
use Tester\Assert;
11+
12+
13+
require __DIR__ . '/../bootstrap.php';
14+
15+
16+
Assert::same(123, Helpers::escape(123));
17+
Assert::same('%%a%%', Helpers::escape('%a%'));
18+
Assert::same('@@', Helpers::escape('@'));
19+
Assert::same('x@', Helpers::escape('x@'));
20+
Assert::same(
21+
['key1' => '%%', 'key2' => '@@', '%%a%%' => 123, '@' => 123],
22+
Helpers::escape(['key1' => '%', 'key2' => '@', '%a%' => 123, '@' => 123])
23+
);

0 commit comments

Comments
 (0)