ID:               37263
 Comment by:       judas dot iscariote at gmail dot com
 Reported By:      dbeckham at dealnews dot com
 Status:           Open
 Bug Type:         Scripting Engine problem
 Operating System: Linux (2.6.14)
 PHP Version:      5.1.2
 New Comment:

php -r '$test = array(array(0,1), array(2,3)); echo
"\{$test[1][0]}\n";'

outputs in PHP 4.3.11 and PHP 4_4 dev

{Array[0]}

in PHP 5_1 CVS outputs

\{Array[0]}

is consistent with the mentioned change, it just output the slash now.

but seems that it may output "\2" as you said,however, that will be
another behaviour change, and Im sure we don't want that right ?

this seems to be a documentation problem


Previous Comments:
------------------------------------------------------------------------

[2006-05-01 20:09:11] dbeckham at dealnews dot com

Here is another example to highlight the problem:

php -r '$test = array(array(0,1), array(2,3)); echo
"{$test[1][0]}\n";'

This should produce the following output:
2


php -r '$test = array(array(0,1), array(2,3)); echo
"\{$test[1][0]}\n";'

This produces:
\{Array[0]}


Since curly braces are no longer special characters, should not echo
"\{$test[1][0]}\n"; produce the following?
\2

------------------------------------------------------------------------

[2006-05-01 20:01:32] dbeckham at dealnews dot com

I disagree, this *is* a bug.  You can't have it both ways, either the
curly brace is not a special character and does not need to be escaped,
or it is a special character used for complex variables and can be
escaped.  What you have right now is neither ... it's a special
character and removed from the output when used with a complex
variable, but if escaped, it's not used with the complex variable and
additionally the backslash is added to the output.

By the way, my intention was never to produce {$ in the output, but
only to make sure the curly brace was output along with the variable.

------------------------------------------------------------------------

[2006-05-01 19:32:26] judas dot iscariote at gmail dot com

this is not a bug, it's a behaviour change of the engine.
see.

http://bugs.php.net/bug.php?id=35527

and the documentation here:

"Before PHP 5.1.1, backslash in \{$var} hasn't been printed."

"(Use "{\$" to get a literal "{$")." [1]

[1] http://php.net/manual/en/language.types.string.php

------------------------------------------------------------------------

[2006-05-01 15:36:29] dbeckham at dealnews dot com

Description:
------------
When escaping curly braces in a string, the backslash characters are
included in any output.

Reproduce code:
---------------
<?
$test = "test";
echo "\{$test\}\n";
?>


Expected result:
----------------
The above output should be:

{test}


Actual result:
--------------
The actual output is:

\{test\}



------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=37263&edit=1

Reply via email to