Я хочу заменить все экземпляры пробелов в URL-адресах с помощью %20. Как мне сделать это с помощью регулярного выражения?
Спасибо!
Я хочу заменить все экземпляры пробелов в URL-адресах с помощью %20. Как мне сделать это с помощью регулярного выражения?
Спасибо!
Здесь нет необходимости в регулярном выражении, если вы просто хотите заменить кусок строки другим: using str_replace() должно быть более чем достаточно:
$new = str_replace(' ', '%20', $your_string);
Но, если вы хотите немного больше, и вы, вероятно, это делаете, если вы работаете с URL-адресами, вы должны взглянуть на urlencode().
Используйте urlencode() вместо того, чтобы пытаться реализовать свои собственные. Будьте ленивы.
Я думаю, вы должны использовать 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
У вас есть несколько вариантов, как это сделать:
urlencode() или rawurlencode() - функции предназначен для кодирования URL-адресов для протокола httpstr_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);
Я предположил, что вы действительно хотите использовать ручную замену строк и обрабатывать больше типов пробелов, таких как нестабильное пространство ( )
$result = preg_replace('/ /', '%20', 'your string here');
вы также можете использовать
$result = urlencode($yourstring)
чтобы избежать других специальных символов, а также
public static function normalizeUrl(string $url) {
$parts = parse_url($url);
return $parts['scheme'] .
'://' .
$parts['host'] .
implode('/', array_map('rawurlencode', explode('/', $parts['path'])));
}