Я хочу заменить все экземпляры пробелов в 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'])));
}