Skip to content

Commit

Permalink
[VarDumper] encode non-ASCII UTF-8 chars as HTML numeric entities
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolas-grekas committed Oct 3, 2014
1 parent 9b2195c commit e383a38
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 12 deletions.
35 changes: 30 additions & 5 deletions src/Symfony/Component/VarDumper/Dumper/HtmlDumper.php
Original file line number Diff line number Diff line change
Expand Up @@ -108,9 +108,9 @@ protected function getDumpHeader()
<script>
Sfjs = window.Sfjs || {};
Sfjs.dump = Sfjs.dump || {};
Sfjs.dump.childElts = document.getElementsByName('sf-dump-child');
Sfjs.dump.childLen = 0;
Sfjs.dump.instrument = function () {
Sfjs.dump.childElts = Sfjs.dump.childElts || document.getElementsByName('sf-dump-child');
Sfjs.dump.childLen = Sfjs.dump.childLen || 0;
Sfjs.dump.instrument = Sfjs.dump.instrument || function () {
var elt,
i = this.childLen,
aCompact = '▶</a><span class="sf-dump-compact">',
Expand All @@ -127,7 +127,7 @@ protected function getDumpHeader()
++i;
}
};
Sfjs.dump.toggle = function(a) {
Sfjs.dump.toggle = Sfjs.dump.toggle || function(a) {
var s = a.nextElementSibling;
if ('sf-dump-compact' == s.className) {
Expand Down Expand Up @@ -214,7 +214,7 @@ protected function style($style, $val)
if ('ref' === $style) {
$ref = substr($val, 1);
if ('#' === $val[0]) {
return "<a class=sf-dump-ref name=\"{$this->dumpId}-ref$ref\">$val</a>";
return "<span class=sf-dump-ref id=\"{$this->dumpId}-ref$ref\">$val</span>";
} else {
return "<a class=sf-dump-ref href=\"#{$this->dumpId}-ref$ref\">$val</a>";
}
Expand Down Expand Up @@ -261,6 +261,31 @@ protected function dumpLine($depth)
}
$this->lastDepth = $depth;

// Replaces non-ASCII UTF-8 chars by numeric HTML entities
$this->line = preg_replace_callback(
'/[\x80-\xFF]+/',
function ($m) {
$m = unpack('C*', $m[0]);
$i = 1;
$entities = '';

while (isset($m[$i])) {
if (0xF0 <= $m[$i]) {
$c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
} elseif (0xE0 <= $m[$i]) {
$c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
} else {
$c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80;
}

$entities .= '&#'.$c.';';
}

return $entities;
},
$this->line
);

parent::dumpLine($depth);
}
}
14 changes: 7 additions & 7 deletions src/Symfony/Component/VarDumper/Tests/HtmlDumperTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,16 @@ public function testGet()
<<<EOTXT
<foo></foo><bar><span class=sf-dump-0><span class=sf-dump-note>array:25</span> [<span name=sf-dump-child>
<span class=sf-dump-1>"<span class=sf-dump-meta>number</span>" => <span class=sf-dump-num>1</span>
<span class=sf-dump-meta>0</span> => <span class=sf-dump-const>null</span> <a class=sf-dump-ref name="sf-dump-{$dumpId}-ref1">#1</a>
<span class=sf-dump-meta>0</span> => <span class=sf-dump-const>null</span> <span class=sf-dump-ref id="sf-dump-{$dumpId}-ref1">#1</span>
"<span class=sf-dump-meta>const</span>" => <span class=sf-dump-num>1.1</span>
<span class=sf-dump-meta>1</span> => <span class=sf-dump-const>true</span>
<span class=sf-dump-meta>2</span> => <span class=sf-dump-const>false</span>
<span class=sf-dump-meta>3</span> => <span class=sf-dump-num>NAN</span>
<span class=sf-dump-meta>4</span> => <span class=sf-dump-num>INF</span>
<span class=sf-dump-meta>5</span> => <span class=sf-dump-num>-INF</span>
<span class=sf-dump-meta>6</span> => <span class=sf-dump-num>{$intMax}</span>
"<span class=sf-dump-meta>str</span>" => "<span class=sf-dump-str>déjà</span>"
<span class=sf-dump-meta>7</span> => b"<span class=sf-dump-str>é</span>"
"<span class=sf-dump-meta>str</span>" => "<span class=sf-dump-str>d&#233;j&#224;</span>"
<span class=sf-dump-meta>7</span> => b"<span class=sf-dump-str>&#233;</span>"
"<span class=sf-dump-meta>[]</span>" => []
"<span class=sf-dump-meta>res</span>" => resource:<span class=sf-dump-note>stream</span> {<span name=sf-dump-child>
<span class=sf-dump-2><span class=sf-dump-meta>wrapper_type</span>: "<span class=sf-dump-str>plainfile</span>"
Expand All @@ -74,7 +74,7 @@ public function testGet()
<span class=sf-dump-meta>options</span>: []
</span></span>}
<span class=sf-dump-meta>8</span> => resource:<span class=sf-dump-note>Unknown</span> {}
"<span class=sf-dump-meta>obj</span>" => <span class=sf-dump-note><abbr title="Symfony\Component\VarDumper\Tests\Fixture\DumbFoo" class=sf-dump-note>DumbFoo</abbr></span> {<span name=sf-dump-child> <a class=sf-dump-ref name="sf-dump-{$dumpId}-ref2">#2</a>
"<span class=sf-dump-meta>obj</span>" => <span class=sf-dump-note><abbr title="Symfony\Component\VarDumper\Tests\Fixture\DumbFoo" class=sf-dump-note>DumbFoo</abbr></span> {<span name=sf-dump-child> <span class=sf-dump-ref id="sf-dump-{$dumpId}-ref2">#2</span>
<span class=sf-dump-2><span class=sf-dump-public>foo</span>: "<span class=sf-dump-str>foo</span>"
"<span class=sf-dump-public>bar</span>": "<span class=sf-dump-str>bar</span>"
</span></span>}
Expand All @@ -92,17 +92,17 @@ public function testGet()
</span></span>}
"<span class=sf-dump-meta>line</span>" => <span class=sf-dump-num>{$var['line']}</span>
"<span class=sf-dump-meta>nobj</span>" => <span class=sf-dump-note>array:1</span> [<span name=sf-dump-child>
<span class=sf-dump-2><span class=sf-dump-meta>0</span> => {} <a class=sf-dump-ref name="sf-dump-{$dumpId}-ref3">#3</a>
<span class=sf-dump-2><span class=sf-dump-meta>0</span> => {} <span class=sf-dump-ref id="sf-dump-{$dumpId}-ref3">#3</span>
</span></span>]
"<span class=sf-dump-meta>recurs</span>" => <span class=sf-dump-note>array:1</span> [<span name=sf-dump-child> <a class=sf-dump-ref name="sf-dump-{$dumpId}-ref4">#4</a>
"<span class=sf-dump-meta>recurs</span>" => <span class=sf-dump-note>array:1</span> [<span name=sf-dump-child> <span class=sf-dump-ref id="sf-dump-{$dumpId}-ref4">#4</span>
<span class=sf-dump-2><span class=sf-dump-meta>0</span> => <a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref4">&4</a> <span class=sf-dump-note>array:1</span> [<a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref4">@4</a>]
</span></span>]
<span class=sf-dump-meta>9</span> => <a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref1">&1</a> <span class=sf-dump-const>null</span>
"<span class=sf-dump-meta>sobj</span>" => <span class=sf-dump-note><abbr title="Symfony\Component\VarDumper\Tests\Fixture\DumbFoo" class=sf-dump-note>DumbFoo</abbr></span> {<a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref2">@2</a>}
"<span class=sf-dump-meta>snobj</span>" => <a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref3">&3</a> {<a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref3">@3</a>}
"<span class=sf-dump-meta>snobj2</span>" => {<a class=sf-dump-ref href="#sf-dump-{$dumpId}-ref3">@3</a>}
"<span class=sf-dump-meta>file</span>" => "<span class=sf-dump-str>{$var['file']}</span>"
b"<span class=sf-dump-meta>bin-key-é</span>" => ""
b"<span class=sf-dump-meta>bin-key-&#233;</span>" => ""
</span></span>]
</span></bar>
Expand Down

0 comments on commit e383a38

Please sign in to comment.