ID:               24645
 Updated by:       [EMAIL PROTECTED]
 Reported By:      nek at capsule dot org
 Status:           Bogus
 Bug Type:         Regexps related
 Operating System: Linux
 PHP Version:      4.3.1
 New Comment:

ereg_replace() is working exactly as expected. The 
inner-most functions are processed first, so strtolower() 
gets processed before ereg_replace(). Therefore, 
"HREF=\"\\1\"" is being sent through strtolower(), not "<A 
HREF=\"JAVASCRIPT:COMMENT()\">". strtolower() has no idea 
what \1 means other than \1. This is totally expected 
behaviour.  
 
Try doing something writing like foo(bar($s)) and write 
your own functions for foo() and bar(). bar() is always 
performed first. Same thing in this case.  
 
The behaviour you're proposing is just not the expected 
bevariour, hence the bogusness. 
 
J 


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

[2003-07-14 09:43:11] nek at capsule dot org

doh... tab then return = submit form.. sorry

i said :

<?php
$newsaff = "<A HREF=\"JAVASCRIPT:COMMENT()\">THIS IS A TEST LINK</A>";

$newsaff =
ereg("HREF=\"([^\"]+)\"",$newsaff,$newsreplace);

for ($i=1;$i<sizeof($newreplace);$i++) {
 $newsaff =
str_replace($newreplace[$i],strtolower($newreplace[$i]),$newsaff);
 }

print $newsaff;
?>

maybe there's a simplier solution, that's coded from scratch ;)

but yes indeed, that's complicated and a non bogus ereg_replace would
be from great help :)

thanks

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

[2003-07-14 09:39:50] nek at capsule dot org

you mean something like :

<?php
$newsaff = "<A HREF=\"JAVASCRIPT:COMMENT()\">THIS IS A TEST LINK</A>";

$newsaff =
ereg("HREF=\"([^\"]+)\"",$newsaff,$newsreplace);

for ($i=1;$i<sizeof($newreplace);$i++)

print $newsaff;
?>

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

[2003-07-14 09:21:06] [EMAIL PROTECTED]

That's correct, so this is bogus. Try using 
ereg()/preg_match() with the optional registers used in 
the third argument to get the results you're looking for. 
 
J 

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

[2003-07-14 09:19:55] nek at capsule dot org

well,

maybe the matching string should be considered as a normal one, so we
can use some functions on it.

this would render ereg_replace function even more powerfull, isn't it ?

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

[2003-07-14 09:09:01] b_ulrich at t-online dot de

Using strtolower("HREF=\"\\1\"") as parameter is like using
"href=\"\\1\"" directly.
First the strtolower is processed and then that result is used as
parameter.

You have to change your search/replace pattern to get what you want.

The function works correct.

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

The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
    http://bugs.php.net/24645

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

Reply via email to