mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-08 11:11:39 +09:00
Remove unnecessary encoding of /, &, ' in template v2 JSON output
This commit is contained in:
parent
c53dab4805
commit
0b9131e664
4 changed files with 9 additions and 4 deletions
|
|
@ -59,6 +59,7 @@ class Template
|
||||||
protected static $_mtime;
|
protected static $_mtime;
|
||||||
protected static $_delay_compile;
|
protected static $_delay_compile;
|
||||||
protected static $_json_options;
|
protected static $_json_options;
|
||||||
|
protected static $_json_options2;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Provided for compatibility with old TemplateHandler.
|
* Provided for compatibility with old TemplateHandler.
|
||||||
|
|
@ -100,6 +101,10 @@ class Template
|
||||||
{
|
{
|
||||||
self::$_json_options = \JSON_HEX_TAG | \JSON_HEX_AMP | \JSON_HEX_APOS | \JSON_HEX_QUOT | \JSON_UNESCAPED_UNICODE;
|
self::$_json_options = \JSON_HEX_TAG | \JSON_HEX_AMP | \JSON_HEX_APOS | \JSON_HEX_QUOT | \JSON_UNESCAPED_UNICODE;
|
||||||
}
|
}
|
||||||
|
if (self::$_json_options2 === null)
|
||||||
|
{
|
||||||
|
self::$_json_options2 = \JSON_HEX_TAG | \JSON_HEX_QUOT | \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES;
|
||||||
|
}
|
||||||
|
|
||||||
// If paths were provided, initialize immediately.
|
// If paths were provided, initialize immediately.
|
||||||
if ($dirname && $filename)
|
if ($dirname && $filename)
|
||||||
|
|
|
||||||
|
|
@ -724,7 +724,7 @@ class TemplateParser_v2
|
||||||
{
|
{
|
||||||
case 'json':
|
case 'json':
|
||||||
return sprintf('<?php echo $this->config->context === \'JS\' ? ' .
|
return sprintf('<?php echo $this->config->context === \'JS\' ? ' .
|
||||||
'json_encode(%s, self::$_json_options) : ' .
|
'json_encode(%s, self::$_json_options2) : ' .
|
||||||
'htmlspecialchars(json_encode(%s, self::$_json_options), \ENT_QUOTES, \'UTF-8\', false); ?>', $args, $args);
|
'htmlspecialchars(json_encode(%s, self::$_json_options), \ENT_QUOTES, \'UTF-8\', false); ?>', $args, $args);
|
||||||
case 'lang':
|
case 'lang':
|
||||||
return sprintf('<?php echo $this->config->context === \'JS\' ? escape_js($this->_v2_lang(%s)) : $this->_v2_lang(%s); ?>', $args, $args);
|
return sprintf('<?php echo $this->config->context === \'JS\' ? escape_js($this->_v2_lang(%s)) : $this->_v2_lang(%s); ?>', $args, $args);
|
||||||
|
|
|
||||||
|
|
@ -62,5 +62,5 @@
|
||||||
|
|
||||||
<script type="text/javascript"<?php $this->config->context = "JS"; ?>>
|
<script type="text/javascript"<?php $this->config->context = "JS"; ?>>
|
||||||
const foo = '<?php echo $this->config->context === 'JS' ? escape_js($__Context->foo ?? '') : htmlspecialchars($__Context->foo ?? '', \ENT_QUOTES, 'UTF-8', false); ?>';
|
const foo = '<?php echo $this->config->context === 'JS' ? escape_js($__Context->foo ?? '') : htmlspecialchars($__Context->foo ?? '', \ENT_QUOTES, 'UTF-8', false); ?>';
|
||||||
const bar = <?php echo $this->config->context === 'JS' ? json_encode($__Context->bar, self::$_json_options) : htmlspecialchars(json_encode($__Context->bar, self::$_json_options), \ENT_QUOTES, 'UTF-8', false); ?>;
|
const bar = <?php echo $this->config->context === 'JS' ? json_encode($__Context->bar, self::$_json_options2) : htmlspecialchars(json_encode($__Context->bar, self::$_json_options), \ENT_QUOTES, 'UTF-8', false); ?>;
|
||||||
<?php $this->config->context = "HTML"; ?></script>
|
<?php $this->config->context = "HTML"; ?></script>
|
||||||
|
|
|
||||||
|
|
@ -919,7 +919,7 @@ class TemplateParserV2Test extends \Codeception\Test\Unit
|
||||||
$source = '@json($var)';
|
$source = '@json($var)';
|
||||||
$target = implode('', [
|
$target = implode('', [
|
||||||
'<?php echo $this->config->context === \'JS\' ? ',
|
'<?php echo $this->config->context === \'JS\' ? ',
|
||||||
'json_encode($__Context->var, self::$_json_options) : ',
|
'json_encode($__Context->var, self::$_json_options2) : ',
|
||||||
'htmlspecialchars(json_encode($__Context->var, self::$_json_options), \ENT_QUOTES, \'UTF-8\', false); ?>',
|
'htmlspecialchars(json_encode($__Context->var, self::$_json_options), \ENT_QUOTES, \'UTF-8\', false); ?>',
|
||||||
]);
|
]);
|
||||||
$this->assertEquals($target, $this->_parse($source));
|
$this->assertEquals($target, $this->_parse($source));
|
||||||
|
|
@ -928,7 +928,7 @@ class TemplateParserV2Test extends \Codeception\Test\Unit
|
||||||
$source = '@json(["foo" => 1, "bar" => 2])';
|
$source = '@json(["foo" => 1, "bar" => 2])';
|
||||||
$target = implode('', [
|
$target = implode('', [
|
||||||
'<?php echo $this->config->context === \'JS\' ? ',
|
'<?php echo $this->config->context === \'JS\' ? ',
|
||||||
'json_encode(["foo" => 1, "bar" => 2], self::$_json_options) : ',
|
'json_encode(["foo" => 1, "bar" => 2], self::$_json_options2) : ',
|
||||||
'htmlspecialchars(json_encode(["foo" => 1, "bar" => 2], self::$_json_options), \ENT_QUOTES, \'UTF-8\', false); ?>',
|
'htmlspecialchars(json_encode(["foo" => 1, "bar" => 2], self::$_json_options), \ENT_QUOTES, \'UTF-8\', false); ?>',
|
||||||
]);
|
]);
|
||||||
$this->assertEquals($target, $this->_parse($source));
|
$this->assertEquals($target, $this->_parse($source));
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue