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


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to