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

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

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