Using PHP Replace SPACES in URLS with

后端 未结 6 1859
太阳男子
太阳男子 2020-11-27 18:46

I\'m looking to replace all instances of spaces in urls with %20. How would I do that with regex?

Thank you!

相关标签:
6条回答
  • 2020-11-27 19:13

    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.

    0 讨论(0)
  • 2020-11-27 19:17
    $result = preg_replace('/ /', '%20', 'your string here');
    

    you may also consider using

    $result = urlencode($yourstring)
    

    to escape other special characters as well

    0 讨论(0)
  • 2020-11-27 19:23
        public static function normalizeUrl(string $url) {
            $parts = parse_url($url);
            return $parts['scheme'] .
                '://' .
                $parts['host'] .
                implode('/', array_map('rawurlencode', explode('/', $parts['path'])));
    
        }
    
    0 讨论(0)
  • 2020-11-27 19:25

    You've got several options how to do this, either:

    • urlencode() or rawurlencode() - functions designed to encode URLs for http protocol
    • str_replace() - "heavy machinery" string replace
    • strtr() - would have better performance than str_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 ( )

    0 讨论(0)
  • 2020-11-27 19:31

    Use urlencode() rather than trying to implement your own. Be lazy.

    0 讨论(0)
  • 2020-11-27 19:33

    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
    
    0 讨论(0)
提交回复
热议问题