While I did reproduce this on a linux system (2.4.9 kernel) with PHP 4.1.1, 
the goal of the script doesn't seem to match the description -- the regexes 
are looking to replace four backslashes with two, not two backslashes with 
one. (Unless you're not counting that two backslashes are actually seen as 
a single backslash because they're being escaped.)

I did notice something odd, though. I wrote a similar script in Perl to see 
if preg_replace was acting properly, 'cause it seemed a little wonky. It 
seems the ereg is acting correctly (obviously -- it's not going to match 
four (escaped) backslashes to a string of two backslashes. However, the 
preg_replace is acting weird -- why is it matching a string of two 
backslashes to a regex containing four? The Perl script that this should be 
equivalent to is something like

$d = "\\\\";
print "--$d--" . length($d) . "\n";
$d =~ s/\\\\\\\\/\\\\/;
print "--$d--" . length($d) . "\n";

Which spits out 

--\\--2
--\\--2

which matches the ereg_replace as expected, but not the preg_replace.

So I guess there is a bug there, just not with ereg_replace, but with 
preg_replace.

J



Josef Svoboda wrote:

> From:             [EMAIL PROTECTED]
> Operating system: FreeBSD 4.2
> PHP version:      4.0.5
> PHP Bug Type:     POSIX related
> Bug description:  ereg_replace fails on strings containing backslashes
> 
> The goal is to replace sequence of two backslashes in $text by one
> backslash. While preg_replace works, ereg_replace does not make any change
> to $text.
> 
> 
> echo "preg_replace\n";
> $text="\\\\";
> echo "--".$text."--".strlen($text)."\n";
> $text=preg_replace( "/\\\\\\\\/", "\\\\", $text);
> echo "--".$text."--".strlen($text)."\n";
> echo "\n";
> echo "ereg_replace\n";
> $text="\\\\";
> echo "--".$text."--".strlen($text)."\n";
> $text=ereg_replace( "\\\\\\\\", "\\\\", $text);
> echo "--".$text."--".strlen($text)."\n";
> 
> 
> ./configure \
>         --with-mysql=/usr/local/mysql \
>         --with-imap=/usr/ports/new/imap \
>         --enable-track-vars \
>         --enable-trans-sid
> 
> 


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to