PHP 4.0 Bug #8986 Updated: preg_replace: "$dd" pattern in replacement string treated as a backreference
| From: | andrei@php.net | Date: | Mon, 29 Jan 2001 22:25:19 +0000 |
| Subject: | PHP 4.0 Bug #8986 Updated: preg_replace: "$dd" pattern in replacement string treated as a backreference | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-45230@lists.php.net to get a copy of this message | ||
ID: 8986
Updated by: andrei
Reported By: gwh@acm.org
Old-Status: Open
Status: Closed
Bug Type: PCRE related
Assigned To:
Comments:
This is documented in the online manual. Please use \\ in front of $ to escape it (latest CVS).
Previous Comments:
---------------------------------------------------------------------------
[2001-01-29 13:05:20] gwh@acm.org
By the way, no variable replacement is taking place with the "$10.00". It fails if the
script is:
<?php
$test = "hello there";
$output = preg_replace('/hello/','$10.00',$test);
print $output;
?>
as well. The input that I am passing to the function is posted form data. Which contains valid text
up to this function call, afterwhich the replaced text exhibits the problem described above.
Thanks...
---------------------------------------------------------------------------
[2001-01-29 13:00:55] gwh@acm.org
In php_pcre.c line 630, the dollar sign '$' is also used as in indicator for a
backreference, which is undocumented. This breaks any replacement string that contains the
"$dd" pattern where "dd" are numerical digits. For example:
<?php
$test = "hello there";
$output = preg_replace("/hello/","$10.00",$test);
print $output;
?>
results in the output:
.00 there
The "$10" is taken as a back reference and resolves to NULL leaving the ".00".
In my application, I need to merge user generated text that may contain dollar signs. I am using
preg_replace and doing multiple keyword,value substitutions using arrays.
My only workaround right now is to perform a preliminary preg_replace and insert a space after each
dollar sign.
---------------------------------------------------------------------------
Full Bug description available at: http://bugs.php.net/?id=8986