|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2006-05-01 15:36 UTC] 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\}
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Tue Dec 02 06:00:01 2025 UTC |
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.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? \2php -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 problemYou are still missing my point. How can curly braces no longer be a special character, yet escaping them *changes* the behavior of PHP? If {$test} produces only the value of $test without curly braces, how on earth can \{$test} not produce the value of $test with a backslash in front of it? Is a curly brace special or not? If you are not a PHP developer and do not have the ability to change the status of this ticket and officially say that this bug will or will not be corrected, please move on. I'm not interested in a 3rd party debate about this issue.