preg_replace eats my backslashes REF BUG#12668

From: 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

« previous php.dev (#89182) next »