$last = substr($js, -1);
if ($last === $first && ($first === "'" || $first === '"')) {
// Use a temp placeholder for escaped backslashes
- return str_replace(['\\\\', "\\'", '\\"', '\\&', '\\/', '**backslash**'], ['**backslash**', "'", '"', '&', '/', '\\'], substr($js, 1, -1));
+ $backslash = chr(0) . 'backslash' . chr(0);
+ return str_replace(['\\\\', "\\'", '\\"', '\\&', '\\/', $backslash], [$backslash, "'", '"', '&', '/', '\\'], substr($js, 1, -1));
}
if (($first === '{' && $last === '}') || ($first === '[' && $last === ']')) {
$obj = self::getRawProps($js);
$result = json_encode($value, JSON_UNESCAPED_SLASHES);
// Convert double-quotes around string to single quotes
if (is_string($value) && substr($result, 0, 1) === '"' && substr($result, -1) === '"') {
- return "'" . str_replace(['\\\\', '\\"', "'", '**backslash**'], ['**backslash**', '"', "\\'", '\\'], substr($result, 1, -1)) . "'";
+ $backslash = chr(0) . 'backslash' . chr(0);
+ return "'" . str_replace(['\\\\', '\\"', "'", $backslash], [$backslash, '"', "\\'", '\\\\'], substr($result, 1, -1)) . "'";
}
return $result;
}
"{a: 'Apple', b: 'Banana', c: [0, -2, 3.15]}",
],
[
- ['a' => ['foo', 'bar'], 'b' => ["'a'" => ['foo/bar&', 'bar(foo)'], 'b' => ['a' => ["fo'oo", '"bar"'], 'b' => []]]],
- "{a: ['foo', 'bar'], b: {\"'a'\": ['foo/bar&', 'bar(foo)'], b: {a: ['fo\\'oo', '\"bar\"'], b: {}}}}",
+ ['a' => ['foo', 'bar'], 'b' => ["'a'" => ['foo/bar&', 'bar(foo)'], 'b' => ['a' => ["fo\\\\'oo", '"bar"'], 'b' => []]]],
+ "{a: ['foo', 'bar'], b: {\"'a'\": ['foo/bar&', 'bar(foo)'], b: {a: ['fo\\\\\\\\\\'oo', '\"bar\"'], b: {}}}}",
],
[TRUE, 'true'],
[' ', "' '"],