ID:               23903
 Updated by:       [EMAIL PROTECTED]
 Reported By:      mnilsson at bowesnet dot com
-Status:           Assigned
+Status:           Bogus
 Bug Type:         PCRE related
 Operating System: linux 2.4.18
 PHP Version:      4.3.2
 Assigned To:      andrei
 New Comment:

"That's just how it works. It matches the whole string on the 
first try and then tries again after the 'c'. Perl works the 
same way. A better way would be to use (.+) actually." --Andrei

So not any bug..



Previous Comments:
------------------------------------------------------------------------

[2003-06-06 03:05:05] [EMAIL PROTECTED]

Andrei, is this documentation issue or real bug? :)


------------------------------------------------------------------------

[2003-05-30 15:12:29] [EMAIL PROTECTED]

Smaller example:

  echo preg_replace ("/(.*)/", "http://\$1";, "abc"),"\n";

Output: http://abchttp://

This doesn't look correct to me.

However, your search pattern doesn't look very reasonable - the normal
way to prepend a string to another string is the "." operator:

  $bannerad_url = 'http://' . $_POST['bannerad_url'];



------------------------------------------------------------------------

[2003-05-30 13:08:35] mnilsson at bowesnet dot com

PROBLEM: preg_replace does not return the proper value with 
a * in the regular expression.

INPUT: $_POST['bannerad_url'] = 'www.canoe.ca';

PROCESS CODE:
$_POST['bannerad_url'] = trim($_POST['bannerad_url']);

if (preg_match ("/^http:\/\/(.*)/i", 
$_POST['bannerad_url']) > 0)
        $bannerad_url = $_POST['bannerad_url'];
else
        $bannerad_url = preg_replace ("/(.*)/", "http://\$1";, 
$_POST['bannerad_url']);

OUTPUT: echo $bannerad_url; -------> http://
www.canoe.cahttp://


FIX:
INPUT: $_POST['bannerad_url'] = 'www.canoe.ca';

PROCESS CODE:
$_POST['bannerad_url'] = trim($_POST['bannerad_url']);

if (preg_match ("/^http:\/\/(.+)/i", 
$_POST['bannerad_url']) > 0)
        $bannerad_url = $_POST['bannerad_url'];
else
        $bannerad_url = preg_replace ("/(.+)/", "http://\$1";, 
$_POST['bannerad_url']);

OUTPUT: echo $bannerad_url; -------> http://www.canoe.ca

NOTES:
I was able to reproduce this several times. It seems to be 
related to the *, but replacing it with a + solves the 
problem. Thanks.

------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=23903&edit=1

Reply via email to