Php url заменить пробелы

Замените все пробелы и специальные символы тире в URL, используя язык PHP

Как заменить пробелы и тире, когда они появляются вместе только с тире в PHP?

http://kjd.case.150/1 BHK+Balcony- 700+ sqft. spacious apartmetn Bandra Wes 

В этом я хочу заменить все специальные символы тире в PHP. В URL-адресе уже есть один тире после “балкона”. Если я заменю тире специальным символом, тогда он станет двумя чертами, потому что в URL-адресе уже есть одна тире, и я хочу только 1 тире.

Я бы сказал, что вы, возможно, захотите этого по-другому. Не “пробелы”, но каждый не-буквенно-цифровой символ.
Потому что могут быть другие символы, которые запрещены в значке URl (+, например, который используется в качестве замены пространства)

Итак, чтобы сделать правильный URL из текста свободной формы

$url = preg_replace("![^a-z0-9]+!i", "-", $url); 

Если может быть максимум одно пространство, окружающее дефис, вы можете использовать ответ John. Если может быть более одного места, вы можете попробовать использовать preg_replace:

Это заменит даже — , не окруженный пробелами с — !!

Чтобы сделать его более эффективным, вы можете сделать:

Теперь это обеспечит, чтобы — имел по крайней мере одно пространство, окружающее его, когда оно было заменено.

Это должно сделать это для вас

strtolower(str_replace(array(' ', ' '), '-', preg_replace('/[^a-zA-Z0-9 s]/', '', trim($string)))); 

Примените это регулярное выражение /[^a-zA-Z0-9]/, ‘-‘ , которое заменит все не буквенно-цифровые символы на — . Сохраните его в переменной и снова примените это регулярное выражение /\-$/, » , которое выйдет за последний символ.

Его старый протектор, но чтобы помочь кому-то, используйте эту функцию:

function urlSafeString($str)

он вернет вам безопасную строку URL

Источник

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

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

Читайте также:  Что значит знак python

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

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

Источник

Как заменить пробелы на% 20 в тегах

Я не нашел soultion с preg_replace, но это может быть простая строка регулярного выражения. Спасибо! Изменить: Извините, ребята, мое описание было не очень ясным. Итак, у меня есть страница full html, и я хочу только заменить внутри тегов img. Я не могу использовать urlencode здесь, поскольку он кодирует и другие вещи.

Читайте также:  One page html profile template

Я пробовал некоторые простые вещи, такие как preg_replace («/ \ s /», «% 20″ . ), но он, очевидно, заменяет все пробелы в тексте. Должен быть способ заставить php заменять только внутри частей src = », но я не знаю как.

используйте urlencode для кодирования URL. используйте preg_replace, чтобы делать меньше, «есть встроенный объект, который делает это».

5 ответов

Пространство представлено в URL-адресе %20, но есть другие символы, которые вы могли бы захотеть преобразовать для других изображений, поэтому вы должны использовать общую функцию urlencode вместо использования «простого регулярного выражения», как указано в OP.

Возможно, я пропустил это, если вы не просматриваете уже выписанный HTML, это, вероятно, не для вас. Это происходит, если вы отказываетесь от него по какой-либо причине. Я оставляю его для чистой ностальгии, поскольку это может помочь кому-то, кто хочет соскоблить и заменить. Извините за путаницу.

Поскольку вы знаете теги и атрибут, я бы предложил посмотреть PHP DOM для этого. Regex может это сделать, но DOM будет предпочтительнее и, возможно, станет проще/надежнее, учитывая контекст, на который вы смотрите. Это сканирует сгенерированный HTML и позволяет вам заменять элементы внутри атрибутов (в данном случае src ), которые с помощью rawurlencode() вы может преобразовать пробелы в %20.

load('test.html'); // if in a file $dom->loadHTML($html); // if in a string for ($i=0; $igetElementsByTagName('img')->length; $i++) < $encoded = implode("/", array_map("rawurlencode", explode("/", $dom->getElementsByTagName('img') ->item($i)->getAttribute('src')))); $dom->getElementsByTagName('img') ->item($i) ->setAttribute('src',$encoded); > echo $dom->saveHTML(); 

Работал на моем маленьком тестовом файле, просто пример того, как это можно сделать:)

Источник

Использование PHP Замените ПРОБЕЛЫ в URL-адресах на% 20

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

есть ли какая-то конкретная причина, по которой это нужно делать с помощью регулярного выражения? если это URL-адрес, вы можете использовать php urldecode метод .. — optimusprime619

Вам лучше описать вашу проблему. Видеть parse_url применять функции только к тем частям, которые вы хотите, или (если возможно) создать действительный URL-адрес с самого начала. — hakre

Читайте также:  Smith waterman algorithm python

6 ответы

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

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

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

Думаю такое решение: stackoverflow.com/a/9240567/4027811 (на самом деле ниже) лучше, потому что измените все критические знаки для url, а не только пробел. — Wieu

Почему это заменяет даже «:» и «/» из url? У меня возникают проблемы при попытке закодировать URL-адрес для проверки через filter_var($url, FILTER_VALIDATE_URL) , потому что он проверяет только то, начинается ли URL с «http». — Жоао Хамерски

Единственная проблема с этим методом заключается в том, что он также превращает все косые черты и амперсанды в объекты. Моя проблема только в пробелах. С уважением, Ленивый. — Давид

$image = 'some images.jpg'; $url = 'http://example.com/' 
echo $url.urlencode($image); //http://example.com/some+images.jpg 
echo $url.rawurlencode(basename($image)); //http://example.com/some%20images.jpg 

Для меня эти выходы такие: http%3A%2F%2Fexample.com%2Fsome%20images.jpg , у моего сервера какие-то проблемы или ваш ответ может быть неточным ?! Спасибо. — АдрианТНТ

  • urlencode() or 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); 

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

Источник

Оцените статью