Req #78064 [Fbk]: var_dump() should display the invisible characters code
Edit report at https://bugs.php.net/bug.php?id=78064&edit=1
ID: 78064
Updated by: nikic@php.net
Reported by: jerome at deuchnord dot fr
Summary: var_dump() should display the invisible characters
code
Status: Feedback
Type: Feature/Change Request
Package: *General Issues
Operating System: Arch Linux
PHP Version: 7.3.5
Block user comment: N
Private report: N
New Comment:
Personally I'd like to have this at least for NUL bytes -- NUL bytes in mangled properties are
a big source of binary tests in php-src. I'm not sure if encoding much beyond that makes sense
though. In particular the characters in the original report are perfectly fine in many non-UTF8 (but
still ASCII-compatible) encodings.
Previous Comments:
------------------------------------------------------------------------
[2019-05-25 10:20:51] sjon@php.net
While an interesting request - you have some incorrect assumptions.
First of all - var_dump actually shows you the difference in the number of characters as illustrated
by the included string-length. (it will be string(12) without the BOM).
Additionally - var_dump actually outputs these characters just fine - it's probably your
browser that decides not to show them. This can be verified by passing the output through xxd (or an
editor that displays it).
For example, when encoding the output from var_dump as json:
$ curl -HAccept:application/json https://3v4l.org/rjuMl
will show you
"output": [{"versions":"7.1.25 -
7.3.5","output":"string(12) \"Hello
World!\"\n---------------\nstring(15) \"\ufeffHello World!\"\n"}]
With encoding set to HTML it's also visible:
$ curl https://3v4l.org/rjuMl|xxd
will show you:
00000fd0: 2d2d 2d2d 2d2d 2d2d 2d0a 7374 7269 6e67 ---------.string
00000fe0: 2831 3529 2022 efbb bf48 656c 6c6f 2057 (15) "...Hello W
00000ff0: 6f72 6c64 2122 0a3c 2f64 643e 3c2f 646c orld!".</dd></dl
------------------------------------------------------------------------
[2019-05-24 11:12:13] jerome at deuchnord dot fr
Description:
------------
In some circumstances, we may get invisible characters in a variable. Currently, these characters
are not visible with var_dump() - the only way you can figure out their presence is by copying it
and paste it on an editor that displays it (for instance Vim).
This behavior leads to strong difficulties for the developers to debug their script.
This becomes really a problem for instance when your variable is an array and there is an invisible
character in one key.
Test script:
---------------
$bom = chr(0xef) . chr(0xbb) . chr(0xbf);
$str = $bom.'Hello World!';
var_dump($str); // string(15) "Hello World!"
Expected result:
----------------
$bom = chr(0xef) . chr(0xbb) . chr(0xbf);
$str = $bom.'Hello World!';
var_dump($str); // string(15) "\0xef\0xbb\0xfeHello World!"
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=78064&edit=1
Thread (6 messages)