preg_replace eats my backslashes REF BUG#12668
| From: | Christian | Date: | Mon, 07 Oct 2002 17:58:14 +0000 |
| Subject: | preg_replace eats my backslashes REF BUG#12668 | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-89182@lists.php.net to get a copy of this message | ||
Hi,
i recently upgraded from 4.0.4pl1 to 4.2.3
and noticed a different behavior with preg_replace when
the substitution string is a variable containing backslashes.
at this point 4.2.3 eats every second slash as 4.0.4pl1 don't .
here's my example:
<?
$TPL = "foosel#label#lesoof";
$DIFF= this one comes from database and contains everything between the
quotes: "\\sth\\\foo\foobar\\\\3"$TPL = preg_replace("/\#([^\#]+)\#/",'<\\1> '.$DIFF.' </\\1>',$TPL); print $TPL; // returns "foosel<label> \\sth\\\foo\foobar\\\\3 </label>lesoof" as expected in 4.0.4pl1 // misleadingly returns "foosel<label> \sth\\foo\foobar\\3 </label>lesoof" in 4.2.3 ?> i found bug#12668 about this issue. but it is flagged "Analyzed" for over one year with the hint to use preg_replace_callback as workaround. imho the substitution string should be treated as is with the option to turn on addslashes, stripslashes or die($hard) as needed. hardly believable everybody is parsing potentially malicious content whereas addslashes would be useful. i try to parse sourcecode and this new feature is my personal pain in the ass as you certainly can imagine ;) is it possible to regain the old (expected) functionality maybe by an additional argument to preg_replace ??? thanks in advance Christian