Я ищу заменить все экземпляры пробелов в URL-адресах с% 20. Как мне сделать это с помощью регулярного выражения?
Спасибо!
Нет необходимости в регулярном выражении здесь, если вы просто хотите заменить кусок строки другим: использование 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-адресов для протокола http str_replace()
– заменить строку «тяжелая техника» strtr()
– будет иметь лучшую производительность, чем str_replace()
при замене нескольких символов preg_replace()
использовать регулярные выражения (perl compatible) strtr()
Предполагая, что вы хотите заменить "\t"
и " "
на "%20"
:
$replace_pairs = array( "\t" => '%20', " " => '%20', ); return strtr( $text, $replace_pairs)
preg_replace()
У вас есть несколько вариантов здесь, заменив просто пространство ~ ~
, снова заменив пространство и tab ~[ \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)
чтобы избежать других специальных символов