RE: running str_replace, it misbehaves!

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> -----Original Message-----
> From: Allen McCabe [mailto:allenmccabe@xxxxxxxxx]
> Sent: 16 August 2009 22:07

[...]
 
> Here is an example of my code:
> 
> [code]
> 
> <?php
> //ENCRYPT FUNCTIONS
> function format_string($string,$functions)
> { $funcs = explode(",",$functions);
>     foreach ($funcs as $func)
>     {
>         if (function_exists($func)) $string = $func($string);
>     }
>     return $string;
> }
> function enc_string($string)
> {  $search =
> array("a","b","c","d","e","f","g","h","i",".........."); //62
> values
>  $replace = array("j9","k8","q7","v6","..........."); //62 values
>  $string = str_replace($search, $replace, $string);
>  $search2 =
> array("9k","8q","7v","6w","5x","4y","3z","2j","................");
> // 126
> values
>  $string = str_replace($search2, $replace2, $string);
>  return $string;
> }

When you feed array search and replace values to str_replace, it runs them in sequence, not in parallel

As you haven't given us a full input alphabet above (and, incidentally, you've left out the value of $replace2!), I can't give an example using your encoding, so let's just take, for example:
 
    $string = 'word';

and feed it through

    str_replace(array('d','o','r','w'), array('w9', 'r8', 'o7', 'd6'), $string);

This proceeds as follows:

d -> w9 = worw9
o -> r8 = wr8rw9
r -> o7 = wo78o7w9    // Note how TWO r->o7 replaces were made here!
w -> d6 = d6o78o7d69  // and similarly w->d6 twice!

I think this gives you a clue as to what is happening -- the same effect will occur on your second str_replace, as well, giving you your apparent "multiple encode" problem. If you must do this kind of translation, then you need a function that doesn't have this re-replace effect, such as strtr() http://php.net/strtr.

But, I have to wonder, why aren't you just using one of the encoding functions readily available in PHP, such as md5() or sha1(), or hash()?


Cheers!

Mike
 -- 
Mike Ford,
Electronic Information Developer, Libraries and Learning Innovation,  
Leeds Metropolitan University, C507, Civic Quarter Campus, 
Woodhouse Lane, LEEDS,  LS1 3HE,  United Kingdom 
Email: m.ford@xxxxxxxxxxxxxx 
Tel: +44 113 812 4730




To view the terms under which this email is distributed, please go to http://disclaimer.leedsmet.ac.uk/email.htm

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux