#15203 [Opn->Bgs]: ereg_replace fails on strings containing backslashes

From: Date: Wed, 14 Aug 2002 18:44:19 +0000
Subject: #15203 [Opn->Bgs]: ereg_replace fails on strings containing backslashes
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-16817@lists.php.net to get a copy of this message
ID: 15203 Updated by: iliaa@php.net Reported By: josef.svoboda@email.cz -Status: Open +Status: Bogus Bug Type: Regexps related Operating System: FreeBSD 4.2 PHP Version: 4.1.2 New Comment: Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php The correct way to accomplish what you are trying to do would be to use one of the following examples: <?php $text="\\\\"; # this string contains two backslashes echo "\n".preg_replace("!".preg_quote("\\\\")."!", "\\", $text); echo "\n".ereg_replace(addslashes("\\\\"), "\\", $text); echo "\n".str_replace("\\\\", "\\", $text); ?> The latter is the fastest. Previous Comments: ------------------------------------------------------------------------ [2002-04-24 09:43:06] josef.svoboda@email.cz I tried to replace sequence of two backslashes in $text by one backslash. While preg_replace works, ereg_replace does not make any change to $text. $text="\\\\"; # this string contains two backslashes echo "\n".preg_replace( "/\\\\\\\\/", "\\\\", $text); # good, prints one backslash echo "\n".ereg_replace( "\\\\\\\\", "\\\\", $text); # bad, prints two backslashes ------------------------------------------------------------------------ [2002-02-04 02:54:23] yohgaki@php.net The version of PHP that this bug was reported in is too old. Please try to reproduce this bug in the latest version of PHP (available from http://www.php.net/downloads.php If you are still able to reproduce the bug with one of the latest versions of PHP, please change the PHP version on this bug report to the version you tested and change the status back to "Open". ------------------------------------------------------------------------ [2002-01-24 06:39:57] josef.svoboda@email.cz 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 ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=15203&edit=1

« previous php.bugs (#16817) next »