Использование PHP Замените ПРОСТРАНСТВА в URL-адресах на% 20 - PullRequest
48 голосов
/ 11 февраля 2012

Я хочу заменить все экземпляры пробелов в URL на% 20.Как бы я сделал это с регулярным выражением?

Спасибо!

Ответы [ 5 ]

75 голосов
/ 11 февраля 2012

Здесь нет необходимости в регулярном выражении, если вы просто хотите заменить кусок строки другим: использование str_replace() должно быть более чем достаточно:

$new = str_replace(' ', '%20', $your_string);


Но если вы хотите немного большего, и, вероятно, если вы работаете с URL-адресами, вам стоит взглянуть на функцию urlencode().

32 голосов
/ 11 февраля 2012

Используйте urlencode() вместо того, чтобы пытаться реализовать свой собственный.Будьте ленивы.

27 голосов
/ 09 октября 2013

Я думаю, что вы должны использовать 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
14 голосов
/ 11 февраля 2012

У вас есть несколько вариантов, как это сделать:

  • urlencode() или rawurlencode() - функции, предназначенные для кодирования URL-адресов для протокола http
  • str_replace() - строка «тяжелая техника» заменяет
  • 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);

Я предположил, что вы действительно хотите использовать ручную замену строк и обрабатывать больше типов пробелов, таких как неразрывный пробел ( )

0 голосов
/ 11 февраля 2012
$result = preg_replace('/ /', '%20', 'your string here');

вы также можете использовать

$result = urlencode($yourstring)

для экранирования других специальных символов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...