Подтвердить что ты не робот

Использование PHP Замените SPACES в URL-адресах с %20

Я хочу заменить все экземпляры пробелов в URL-адресах с помощью %20. Как мне сделать это с помощью регулярного выражения?

Спасибо!

4b9b3361

Ответ 1

Здесь нет необходимости в регулярном выражении, если вы просто хотите заменить кусок строки другим: using str_replace() должно быть более чем достаточно:

$new = str_replace(' ', '%20', $your_string);


Но, если вы хотите немного больше, и вы, вероятно, это делаете, если вы работаете с URL-адресами, вы должны взглянуть на urlencode().

Ответ 2

Используйте urlencode() вместо того, чтобы пытаться реализовать свои собственные. Будьте ленивы.

Ответ 3

Я думаю, вы должны использовать rawurlencode() вместо urlencode() для своей цели.

Пример

$image = 'some images.jpg';
$url   = 'http://example.com/'

С urlencode ($ str) вы получите

echo $url.urlencode($image); //http://example.com/some+images.jpg

не изменяется на %20 вообще

но с rawurlencode ($ image) создаст

echo $url.rawurlencode(basename($image)); //http://example.com/some%20images.jpg

Ответ 4

У вас есть несколько вариантов, как это сделать:

  • urlencode() или rawurlencode() - функции предназначен для кодирования URL-адресов для протокола http
  • str_replace() - заменить строку "heavy machinery"
  • strtr() - будет иметь лучшую производительность, чем str_replace() при замене нескольких символов
  • preg_replace() использовать регулярные выражения (совместимые с perl)

strtr()

Предполагая, что вы хотите заменить "\t" и " " на "%20":

$replace_pairs = array(
  "\t" => '%20',
  " " => '%20',
);
return strtr( $text, $replace_pairs)

preg_replace()

У вас есть несколько вариантов здесь, заменив просто пробел ~ ~, снова заменив пробел и вкладку ~[ \t]~ или все виды пробелов ~\s~:

return preg_replace( '~\s~', '%20', $text);

Или, когда вам нужно заменить строку следующим образом "\t \t \t \t" только одним %20:

return preg_replace( '~\s+~', '%20', $text);

Я предположил, что вы действительно хотите использовать ручную замену строк и обрабатывать больше типов пробелов, таких как нестабильное пространство ( )

Ответ 5

$result = preg_replace('/ /', '%20', 'your string here');

вы также можете использовать

$result = urlencode($yourstring)

чтобы избежать других специальных символов, а также

Ответ 6

    public static function normalizeUrl(string $url) {
        $parts = parse_url($url);
        return $parts['scheme'] .
            '://' .
            $parts['host'] .
            implode('/', array_map('rawurlencode', explode('/', $parts['path'])));

    }