php заменить текст в строке
Урок 19. PHP — str_replace
Сейчас мы рассмотрим одну очень полезную функцию для работы со строками, а именно для замены частей строк. Это функция str_replace, которая похожа на метод в текстовых редакторах «Заменить». Как ее использовать, примеры и советы читайте ниже.
Параметры вызова
str_replace имеет три параметра, которые все являются обязательными.
На самом деле, здесь, как и во всех предыдущих уроках, все просто. Давайте посмотрим на пример кода и все сразу встанет на свои места.
Пример применения str_replace
Итак, есть у нас входная строка «На полке лежит X килограмм мандарин». Вместо «X» мы хотим подставить нужную цифру. Может для этого воспользоваться реплейсом примерно таким образом:
Пример, конечно, не из лучших, я просто другого не придумал, но он отражает суть, верно? Надеюсь все понятно, если нет, то спрашивайте в комментариях.
str_replace с массивами: несколько замен в одной
В примере мы использовали реплейс, чтобы заменить одно слово «X» на нашу строку (число или что угодно), но что если мы хотим заменить много слов? Можно попробовать просто использовать функцию несколько раз, или же создать массив слов, КОТОРЫЕ будем заменять, а также второй массив, со значениями НА КОТОРЫЕ будем заменять, чтобы получить результат за один вызов функции.
Давайте расширим тот же пример, но позаменяем еще что-то.
Соответственно, что мы получим:
Такие вот дела. Теперь можете сами прикинуть как вы сможете использовать данный метод. На самом деле, он Очень полезен! Например, при написании парсеров — просто крайне необходим!
Комментарии:
Спасибо администратору! Отличный сайт, именно тут я начал свой базис PHP. Всё разбирается детально и по мелочам. Рассказываете легко и ненавязчиво, так что создаётся впечатление что PHP это реально просто и легко! Хотелось бы конечно побольше уроков, но и данный минимум полученный тут уже даёт возможность мне читать что-то более углублённо и с понятием о чём речь. Спасибо автору ещё раз. Совет, если ваши статьи авторские и не копипаста откуда-то сделайте возможность пожертвования. Я бы пару тысяч вам закинул просто в благодарность, ибо мне уроки очень помогли 🙂 Я вовсю ухожу из тестирования в разработку, и каждый день читал по 4-5 уроков отсюда, так вот я могу уже помогать нашим разработчикам работать над проектами.
Александр, спасибо большое за теплые слова. Статьи авторские. Поначалу было переводил зарубежные уроки, но потом понял, что придется очень многое адаптировать и решил что проще уже полностью самому писать 🙂 Буду и дальше стараться давать качественный материал своим читателям ) Вам отписал на почту.
Теперь гоу фейки делать) Спасибо, думал PHP выучить это такой гемор! А пройдя Ваш экпресс курс, изменил своё мнение, спасибо за заложенный базис =) Буду практиковаться и учится дальше, развиваться! Выкладывайте еще уроки, например про среду разработки, серверы и т.п. Ну и конечно же про остальные возможности PHP.
Огромное спасибо, отличный мануал!
Теги в комментариях не отображаются. Я имел в виду тег br в этом уроке.
Николай, все верно, по стандартам W3C все теги должны быть закрыты. Если тег не имеет отдельной закрывающейся части (как img и br), то допускается закрытие сразу же в открувающем, как у меня с br.
ваши уроки мне пригодились понять основу PHP) мне очень понятны все материалы благодарю вас
Очень нравятся ваши уроки, огромное спасибо.
Для меня это все еще огромная пропасть, но уже что то понимаю.
Например связал Форму отправки с кодом switch. Получилось прикольно))
Благодарю вас, myblaze, за эти уроки.Мне они сильно помогли)
Добрый день! а кто то мне может объеснить почему эта функция так делает:
🙂 Вопрос снят. Совсем забыл. Нужны ковычки одинарные.
str_replace
(PHP 4, PHP 5, PHP 7, PHP 8)
str_replace — Заменяет все вхождения строки поиска на строку замены
Описание
Список параметров
Если search или replace являются массивами, их элементы будут обработаны от первого к последнему.
Искомое значение, также известное как needle (иголка). Для множества искомых значений можно использовать массив.
Строка или массив, в котором производится поиск и замена, также известный как haystack (стог сена).
Если передан, то будет установлен в количество произведённых замен.
Возвращаемые значения
Эта функция возвращает строку или массив с заменёнными значениями.
Примеры
Пример #1 Примеры использования str_replace()
Пример #2 Примеры потенциальных трюков с str_replace()
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Замечание о порядке замены
Так как str_replace() осуществляет замену слева направо, то при использовании множественных замен она может заменить ранее вставленное значение на другое. Смотрите также примеры на этой странице.
Эта функция чувствительна к регистру. Используйте str_ireplace() для замены без учёта регистра.
Смотрите также
User Contributed Notes 34 notes
A faster way to replace the strings in multidimensional array is to json_encode() it, do the str_replace() and then json_decode() it, like this:
>
?>
This method is almost 3x faster (in 10000 runs.) than using recursive calling and looping method, and 10x simpler in coding.
Note that this does not replace strings that become part of replacement strings. This may be a problem when you want to remove multiple instances of the same repetative pattern, several times in a row.
If you want to remove all dashes but one from the string ‘-aaa—-b-c——d—e—f’ resulting in ‘-aaa-b-c-d-e-f’, you cannot use str_replace. Instead, use preg_replace:
Be careful when replacing characters (or repeated patterns in the FROM and TO arrays):
To make this work, use «strtr» instead:
Feel free to optimize this using the while/for or anything else, but this is a bit of code that allows you to replace strings found in an associative array.
$string = ‘I like to eat an apple with my dog in my chevy’ ;
// Echo: I like to eat an orange with my cat in my ford
?>
Here is the function:
Be aware that if you use this for filtering & sanitizing some form of user input, or remove ALL instances of a string, there’s another gotcha to watch out for:
// Remove all double characters
$string=»1001011010″;
$string=str_replace(array(«11″,»00″),»»,$string);
// Output: «110010»
$string=» ml> Malicious code html> etc»;
$string=str_replace(array(» «,» «),»»,$string);
// Output: » Malicious code etc»
This is what happens when the search and replace arrays are different sizes:
To more clearly illustrate this, consider the following example:
The following function utilizes array_combine and strtr to produce the expected output, and I believe it is the most efficient way to perform the desired string replacement without prior replacements affecting the final result.
This strips out horrible MS word characters.
Just keep fine tuning it until you get what you need, you’ll see ive commented some out which caused problems for me.
There could be some that need adding in, but its a start to anyone who wishes to make their own custom function.
There is an «invisible» character after the †for the right side double smart quote that doesn’t seem to display here. It is chr(157).
[] = ‘“’ ; // left side double smart quote
$find [] = ‘‒ ; // right side double smart quote
$find [] = ‘‘’ ; // left side single smart quote
$find [] = ‘’’ ; // right side single smart quote
$find [] = ‘…’ ; // elipsis
$find [] = ‘—’ ; // em dash
$find [] = ‘–’ ; // en dash
$replace [] = ‘»‘ ;
$replace [] = ‘»‘ ;
$replace [] = «‘» ;
$replace [] = «‘» ;
$replace [] = «. » ;
$replace [] = «-» ;
$replace [] = «-» ;
nikolaz dot tang at hotmail dot com’s solution of using json_encode/decode is interesting, but a couple of issues to be aware of with it.
json_decode will return objects, where arrays are probably expected. This is easily remedied by adding 2nd parameter ‘true’ to json_decode.
Might be worth mentioning that a SIMPLE way to accomplish Example 2 (potential gotchas) is to simply start your «replacements» in reverse.
So instead of starting from «A» and ending with «E»:
substr_replace
(PHP 4, PHP 5, PHP 7, PHP 8)
substr_replace — Заменяет часть строки
Описание
Список параметров
Возвращаемые значения
Возвращает результирующую строку. Если string является массивом, то возвращает массив.
Список изменений
Версия | Описание |
---|---|
8.0.0 | length теперь допускает значение null. |
Примеры
Пример #1 Простой пример использования substr_replace()
Пример #2 Использование substr_replace() для одновременной множественной замены строк
Результат выполнения данного примера:
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Смотрите также
User Contributed Notes 35 notes
Forget all of the mb_substr_replace() implementations mentioned in this page, they’re all buggy.
Here is a version that mimics the behavior of substr_replace() exactly:
PHP version of Java’s removeCharAt() function:
Using substr_replace() can be avoided by using substr() instead:
This can be useful when you need to replace parts of multibyte strings like strings encoded with utf-8. There isn’t a multibute variant for substr_replace(), but for php substr() there is mb_substr(). For more information on multibyte strings see http://nl3.php.net/manual/en/ref.mbstring.php
I’ve just taken a look at the post by ntoniazzi and I have a very small correction to make.
In the second if statement, it should be a triple equals, so:
I wrote a function that you can use for example in combination with a search script to cut off the articles that are too long.
I recently ran across a situation where I need to strip a heavily nested html list such that only the top level was preserved. I started with a regular expression solution, but found that I kept matching the wrong closing ul with an outer opening ul.
This was my alternative solution, and it seems to work well:
?>
Hope this helps someone.
This will truncate a longer string to a smaller string of specified length while replacing the middle portion with a separator exactly in the middle.
//prints «abcdefghij/. /56789z.jpg»
I have a little function that works like substr_replace () what I use for some purpose. Maybe someone needs it.
This is a small powerful function that performs its job flawlessly.
I suggest changing the function suggested by Guru Evi slightly. I found that it doesn’t work as written here.
If your string is not long enough to meet what you specify in start and length then the replacement string is added towards the end of the string.
I use strip_tags to strip out the HTML otherwise you might get a screwed up HTML (when a tags open in the string, but because you cut-off it doesn’t)
THE DOT DOT DOT ISSUE
PROBLEM:
You want to abbreviate a string.
E.g. You want «BritneySpears» to show as «BritneySpe. «, being only the ten first characters followed by «. «
This will result in BritneySpe.
The older function would end up looking like «blah blah. » or «blah blah. » which doesn’t look so nice to me.
$punctuation = «. ;,-» ; //punctuation you want removed
Here is a simple function to shorten a string and add an ellipsis
This may be obvious to others, but I just spent hours and my feeble brain only caught up to it after a long break.
If you are looping through a string which has multiple substrings that need to be replaced, you have to add an offset factor to each original offset before you replaced any strings. Here is a real world example:
From draft.js we get paragraphs with multiple links designated only with offset, anchor text length, url, target. So each anchor text must be wrapped in the anchortext to save proper content in the database.
Here is the implementation of offset factor:
I hope this helps a noobie 🙂 If there is another easier way, I would love to hear about it.
First Example can be simplified =>
$input = array(‘A: XXX’, ‘B: XXX’, ‘C: XXX’);
output: Array ( [0] => A: YYY [1] => B: YYY [2] => C: YYY )
I recently needed a routine that would remove the characters in one string from another, like the regex
I don’t know if this function is multibyte safe but I’ve written a function that will do the same in multibyte mode.
Just to add to the examples, if replacement is longer than length, only the length number of chars are removed from string and all of replacement is put in its place, and therefor strlen($string) is inreased.
$var = ‘ABCDEFGH:/MNRPQR/’;
/* Should return ABCDEFGH:/testingRPQR/ */
echo substr_replace ($var, ‘testing’, 10, 2);
If you would like to remove characters from the start or end of a string, try the substr() function.
The comment by geniusdex is a good one. Short, simple functions are the best. But if the string is not longer than the limit set, NOTHING is returned. Here is the function re-done to always return a string:
Regarding «. «, even the short functions are too long and complicated, and there’s no need to use substr_replace. substr() works better and is way faster prior to 4.3.5 as the below poster stated.
This is my version of making dotted strings:
To abbreviate links into ‘. ‘ if they outreach a certain amount of space; use the preg_replace function instead.
For instance you grabbed the headlines of a news site for use on your own page and the lines are to long:
Как найти и заменить элемент в строке примеры str_replace
Как заменить элемент в строке, еще сложнее найти и заменить элемент в строке, это может быть слово, часть слова. код Какие функции существую для замены в строке!?
Я не буду обозревать все функции которые существуют! Расскажу о той, которой сам пользуюсь! Эта функция str_replace.
Поиск и замена в строке php
Как заменить один элемент строки!?
У нас есть некая строка, в которой требуется найти какой-то элемент и заменить его на другой!
Мы воспользуемся функцией str_replace
Для этой функции и множества аналогичных нужно запомнить, что внутри неё…
Нам потребуется переменная…
Замена str_replace будет иметь такой вид:
Как видим наше подчеркивание заменилось удачно!
Как заменить несколько элементов строки!?
Чем еще замечательна функция str_replace – тем, что она умеет заменять не только один элемент строки, но и несколько!
Почему я решил сегодня написать эту страницу… вчера у меня задача стояла заменить в строке несколько элементов например:
Если вы нажмете по данной ссылке и посмотрите в адресную строку, то увидите вот такой адрес…
Поэтому я и люблю эту функцию!
Создадим массив с элементами, которые нужно заменить в строке:
Функция с переменными и массивом будет выглядеть так:
Результат замены в строке нескольких элементов на один php:
Как заменить пробелы в Php
Для того, чтобы заменить пробелы в php, нам опять потребуется:
1). Тестовый текст в переменной. в котором будут пробелы:
$objekt = «Это тестовый текст с пробелами, которые мы будем заменять, на что-то, не важно на что!»;
Результат поиска измены пробела на что-то:
Как заменить слово/слова в Php
Далее нам потребуется массив, на который будем менять. слова будут те же. но вот мы обернем их в цвет.
Ну и собственно текст, где и будем менять массив на массив:
И выведем прямо здесь нашу замену слова:
Результат замены слова
Найти первое повторяющееся слово и выделить его
Предположим, что вам нужно найти первое повторяющееся слово в тексте и его же нужно подчеркнуть!
Создадим сразу несколько переменных с разным текстом:
Разбиваем текст по пробелу с помощью explode
Далее нам потребуется два цикла. Внутри второго чикла пишем условие, если слово в массиве будет повторяться, то создаем счетчик, по имени слова:
Далее следующее условие, если счетчик будет равен 2, то прерываем цикл :
Далее Измененный массив преобразуем в строку:
Запакуем это все в функцию :
Выведем результаты, нахождения первого повторяющегося слова в тексте :
Пример функции, которая найдет в тексте первое встречающиеся слово и выделит его :
Это тестовый текст в котором есть повторяющееся слово текст
Это слово и тестовый текст в котором есть повторяющееся слово и слово текст
Это слово и тестовый текст в котором есть повторяющееся слово и слово это текст
Сохранил старый текст на картинке и дальше расскажу зачем. и сравните 4 строку на скрине и выше идущую строку №4:
Пример функции, которая найдет в тексте первое встречающиеся слово и выделит его : Как решил задачку.
Написал я данную функцию.
И мне нужно было куда-то ехать.
Сел на сиденье и. тут меня осенило, совсем простой способ, чтобы мы могли найти и сравнивать слово в массиве и повторяющееся слово, их просто нужно привести к одному регистру. Вроде бы такая элементарная вещь, но как-то она сразу мне не пришла в голову.
И такая функция вполне способна решить проблему «ПРОПИСНЫХ» букв в начале предложения!
Поэтому следующий пункт, где я занимался какими-то извращениями просто не нужен!
Замена слов в скобках php
Замена слов в скобках php
После обработки php скриптом, это будут обычные ссылки, слова в скобках были заменены на :
В первом случае с php:
Во втором случае с css:
Онлайн нахождение первого и повторяющихся слов
Далее мы используем форму для ввода данных, внутри уже расположен какой-то текст.
Необходимо выбрать, что будем искать :
Найти первое повторяющиеся слово в тексте. и
Найти все повторяющиеся слова в тексте.
Через некоторое время пришлось вернуться к этой теме, поскольку поиск всех повторяющихся слов работал несколько некорректно!
Не буду рассказывать всю функцию.
Алгоритм нахождения всех двойных слов и подсветка.
Далее нам придется решить, как искать и сравнивать повторяющиеся такие слова, как возьмем слово «лампа» :
лампа и лампа(и любой знак препинания и др.знаки)
лампа и лампа(и любой тег html, например перенос
)
Скачать скрипт писка и выделения повторяющихся слов в тексте:
Поисковые запросы.
Php найти слово в скобках
Заменить N-ый символ в строке php
А если для латиницы, то вообще легко.
Раз уж пошла речь о замене 5, то и возьмем это число и фразу:
Загоним наш текст в переменную.
Вопрос на засыпку. почему нельзя таким образом заменить символ на несколько символов. что произойдет!?
Заменить N-ый символ на любое количество знаков.
Если вы не ответили на вопрос, почему нельзя заменить один символ на несколько символов, то ответ простой! Символ можно заменить только на 1 символ! Иначе структура переменной поломается. и замену не увидите, и все, что после этого символа, вместе с символом.
А если нужно N-ый символ строки заменить на слово!?
На предложение и т.д. да на что угодно.
Разобьем(explode) строку в массив, по тому символу, который хотим заменить :
Соединим(implode) массив в строку, в первое значение помещаем все то, на что хотим заменить. Либо туда переменную.
Сообщение системы комментирования :
Форма пока доступна только админу. скоро все заработает. надеюсь.
str_replace()
Синтаксис:
str_replace(search, replace, subject[, count])
Поддерживается следующими версиями PHP:
Описание функции:
Функции str_replace() производит замену одних символов в строке другими.
Обязательный аргумент. Строка или массив поиска
Использование функции str_replace() предпочтительнее использованию функции preg_replace(), так как работает быстрее.
Функция str_replace() отличается от функции str_ireplace() тем, что чувствительна к регистру.
Примеры:
Пример 1:
echo str_replace(«Вова»,»Дима»,»С добрым утром Вова!»);
?>
С добрым утром Дима!
Пример 2:
В этом примере показано использование массивов
$arr1 = array(«1″,»2″,»3»);
$arr2 = array(«a»,»b»,»c»);
echo str_replace($arr2,$arr1,»cabdfg»);
?>
Пример 3:
В этом примере показано использование массивов во всех аргументах
$arr1 = array(«1″,»2″,»3»);
$arr2 = array(«a»,»b»,»c»);
$arr3 = array(«t»,»c»,»a»);
print_r (str_replace($arr2,$arr1,$arr3));
?>