Using PHP Replace SPACES in URLS with %20
No need for a regex here, if you just want to replace a piece of string by another: using str_replace()
should be more than enough :
$new = str_replace(' ', '%20', $your_string);
But, if you want a bit more than that, and you probably do, if you are working with URLs, you should take a look at the urlencode()
function.
Use urlencode()
rather than trying to implement your own. Be lazy.
I think you must use rawurlencode() instead urlencode() for your purpose.
sample
$image = 'some images.jpg';
$url = 'http://example.com/'
With urlencode($str) will result
echo $url.urlencode($image); //http://example.com/some+images.jpg
its not change to %20 at all
but with rawurlencode($image) will produce
echo $url.rawurlencode(basename($image)); //http://example.com/some%20images.jpg
You've got several options how to do this, either:
-
urlencode()
orrawurlencode()
- functions designed to encode URLs for http protocol -
str_replace()
- "heavy machinery" string replace -
strtr()
- would have better performance thanstr_replace()
when replacing multiple characters -
preg_replace()
use regular expressions (perl compatible)
strtr()
Assuming that you want to replace "\t"
and " "
with "%20"
:
$replace_pairs = array(
"\t" => '%20',
" " => '%20',
);
return strtr( $text, $replace_pairs)
preg_replace()
You've got few options here, either replacing just space ~ ~
, again replacing space and tab ~[ \t]~
or all kinds of spaces ~\s~
:
return preg_replace( '~\s~', '%20', $text);
Or when you need to replace string like this "\t \t \t \t"
with just one %20
:
return preg_replace( '~\s+~', '%20', $text);
I assumed that you really want to use manual string replacement and handle more types of whitespaces such as non breakable space (
)
$result = preg_replace('/ /', '%20', 'your string here');
you may also consider using
$result = urlencode($yourstring)
to escape other special characters as well