Замените все пробелы и специальные символы тире в 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. Как мне сделать это с помощью регулярного выражения?
Нет необходимости в регулярном выражении здесь, если вы просто хотите заменить кусок строки другим: использование 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 здесь, поскольку он кодирует и другие вещи.
Я пробовал некоторые простые вещи, такие как 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
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);
Я предположил, что вы действительно хотите использовать замену строк вручную и обрабатывать больше типов пробелов, таких как неразрывное пространство ( )