Я ищу заменить все экземпляры пробелов в 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)
чтобы избежать других специальных символов