Php как заменить символ в файле

Обновлено: 07.07.2024

Рассмотрим примеры обработки и замены текста между HTML тегами, используя PHP функции для поиска и подмены по регулярным выражениям. Для примера возьмем абстрактный кусок кода, над которым будем проводить различные действия.

На месте <xx> может быть любой тег, а троеточие обозначает любой произвольный текст.

Поиск текста функцией «preg_match_all»

Для поиска текста внутри тегов воспользуемся функцией «preg_match_all». Зададим маску поиска и посмотрим, что она возвращает в качестве результата.

В нулевой разряд массива записались значения с тегами, а в первый — только текст между ними. Если требуется автоматизировать вывод всего найденного, то лучше использовать цикл foreach . Его рассмотрим ниже.

Функция preg_match_all возвращает «1» в случае нахождения в тексте соответствия с указанной маской или «0», если соответствий не найдено. В качестве параметров принимает маску, строку где ищем и переменную, в которую будут записаны найденные совпадения.

Маска поиска обрамляется символами «|». За ними идут директивы — «isU» обозначает регистронезависимый поиск в многострочном тексте с кодировкой «UTF-8»

В самом правиле содержатся теги, между которыми требуется заменить текст — «(.+)». Точка символизирует любой символ, а плюс — что он может повторяться один или больше раз. Скобки говорят о том, что содержимое между ними нужно записать в переменную с результатом.

Перебор найденных результатов в цикле «foreach»

Для вывода результатов поиска можно воспользоваться циклом «foreach».

На выходе получаем тоже самое что и в предыдущем примере, зато теперь мы автоматизировали перебор массива и сократили код.

Отличие «preg_match» от «preg_match_all»

Функция «preg_match» осуществляет поиск только до первого соответсвия с маской. Как только что-то найдено — поиск останавливается и возвращается одномерный массив.

Здесь нулевой элемент массива «$arr» содержит найденное совпадение вместе с тегами «title», а первый элемент — «$arr[1]» только текст между этими тегами. Если в строке несколько тегов «title», это не значит что остальные значения будут записаны в «$arr[2]» и так далее. Элемент «$arr[2]» окажется не пуст если в маске указано несколько правил, но об этом в следующий раз.

Замена текста между тегами функцией «preg_replace»

Если требуется найти и произвести замену найденных элементов в строке, то на помощь приходит PHP функция «preg_replace».

Заменим в нашем примере все имена между тегами на какое-то конкретное, например — «Оля».

Замена тегов, оставляя всё, что находится внутри

А теперь небольшой пример, показывающий как заменить определенные теги, сохранив содержимое между ними. Допустим, надо изменить в html коде все «strong» на CSS форматирование.

Обработка и замена при помощи «preg_replace_callback»

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

В качестве параметров передаём маску поиска, функцию с кодом обработки и строковую переменную в которой осуществляем поиск. Дополнительно могут ещё быть заданы два необязательных параметра. О них в следующем разделе статьи.

Переменная «$matches» это массив, содержащий элементы регулярного выражения. В нулевом элементе будет содержаться вся исходная строка, а в остальных — содержимое скобок.

Код обработки не описываю, но отмечу что для замены первой буквы на заглавную я использую PHP функции для работы со строками в UTF-8 кодировке. Если у Вас кодировка cp1251, то нужно отбросить префикс «mb_» и удалить последний параметр у функций.

ВНИМАНИЕ! Код в примере будет работать только при использовании PHP версии 5.3 и выше. Для более поздних версий требуется доработка.

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

Теперь немного о продвинутых возможностях функции «preg_replace_callback». Ранее я упоминал что у неё есть два необязательных параметра. Первый (по умолчанию равен «-1») содержит максимальное количество замен, которое должна произвести функция. Второй — переменная, в которую будет записано количество произведенных замен.

Задав эти два параметра в предыдущем примере, замена главной буквы будет произведена только у первых двух имён. Соответственно, переменная «$count» будет содержать — 2. Если установить первый дополнительный параметр в «-1», то «$count» будет — 3.

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

Для реализации может быть использована глобальная или статическая переменная. Использование глобальных переменных может быть отключено в PHP, поэтому рассмотрим пример со статической переменной. Присвоим всем тегам h2 уникальный идентификатор.

Объявляя статическую переменную нужно помнить что она сохраняет своё значение между вызовами функции, поэтому идеально подходит для решения нашей задачи.

Как заменить элемент в строке, еще сложнее найти и заменить элемент в строке, это может быть слово, часть слова. код Какие функции существую для замены в строке!?

Я не буду обозревать все функции которые существуют! Расскажу о той, которой сам пользуюсь! Эта функция str_replace.

Поиск и замена в строке php

Как заменить один элемент строки!?

У нас есть некая строка, в которой требуется найти какой-то элемент и заменить его на другой!

Здесь текст с нижним тире_, которое_ надо заменить на обыкновенное -

Мы воспользуемся функцией str_replace

Для этой функции и множества аналогичных нужно запомнить, что внутри неё…

Нам потребуется переменная…

$переменная = "Здесь текст с нижним тире_, которое_ надо заменить на обыкновенное -";

Замена str_replace будет иметь такой вид:

Как видим наше подчеркивание заменилось удачно!

Здесь текст с нижним тире - , которое - надо заменить на обыкновенное -

Как заменить несколько элементов строки!?

Чем еще замечательна функция str_replace – тем, что она умеет заменять не только один элемент строки, но и несколько!

Почему я решил сегодня написать эту страницу… вчера у меня задача стояла заменить в строке несколько элементов например:

Если вы нажмете по данной ссылке и посмотрите в адресную строку, то увидите вот такой адрес…

Чтобы сто раз не повторять поместим её в переменную - она нам понадобится.

В этой строке нам нужно заменить три элемента . в общем не важно сколько будет у вас элементов и сколько их вообще нужно заменить в строке!

Поэтому я и люблю эту функцию!

У нас есть три элемента, которые мне требовалось заменить… " ? & = "

Создадим массив с элементами, которые нужно заменить в строке:

Результат замены в строке нескольких элементов на один php:

Как заменить пробелы в Php

Для того, чтобы заменить пробелы в php, нам опять потребуется:

1). Тестовый текст в переменной. в котором будут пробелы:

$objekt = "Это тестовый текст с пробелами, которые мы будем заменять, на что-то, не важно на что!";

Берем нашу функцию для замены, в первом значении функции ставим пробел. во втором.. ставим , то на что будем заменять пробел,

ну например <red>Ё</red> , и третьим будет наша переменная и выведем с помощью echo прямо здесь.

Результат поиска измены пробела на что-то:

Это Ё тестовый Ё текст Ё с Ё пробелами, Ё которые Ё мы Ё будем Ё заменять, Ё на Ё что-то, Ё не Ё важно Ё на Ё что!

Как заменить слово/слова в Php

Для того, чтобы заменить слово в тексте нам потребуется некий текст с некими словами, и желательно, чтобы это слово повторялось несколько раз! И если это слово будет найдено, то покрасим в какой-то цвет! А давайте вот этот текст, в котором и идет речь о замене слова, покрасим данное слово в красный цвет!(если вы не поняли, то он кричит - "это гениально. ")

И тут внимание! Выше было показано, как можно найти, какой-то элемент в строке и заменить его! Еще можно было заменить из массива!
А что если мы заменим. массив на массив!? Интересно!? Тогда погнали!
Для этого. нам понадобится. массив $search

Далее нам потребуется массив, на который будем менять. слова будут те же. но вот мы обернем их в цвет.

Ну и собственно текст, где и будем менять массив на массив:

$subject_1 = "Для того, чтобы заменить слово в тексте нам потребуется некий текст с некими словами, и желательно, чтобы это слово повторялось несколько раз! И если это слово будет найдено, то покрасим в какой-то цвет! А давайте вот этот текст, в котором и идет речь о замене слова, покрасим данное слово в красный цвет!, а все слова, которые будут иметь в совсем составе слово «слова» , будут покрашены в синий ";

И выведем прямо здесь нашу замену слова:

Результат замены слова

Для того, чтобы заменить слово в тексте нам потребуется некий текст с некими слова ми, и желательно, чтобы это слово повторялось несколько раз! И если это слово будет найдено, то покрасим в какой-то цвет! А давайте вот этот текст, в котором и идет речь о замене слова , покрасим данное слово в красный цвет!, а все слова , которые будут иметь в совсем составе слово « слова » , будут покрашены в синий

Найти первое повторяющееся слово и выделить его

Требуется найти в тексте первое повторяющиеся слово и подчеркнуть его(выделить).

Предположим, что вам нужно найти первое повторяющееся слово в тексте и его же нужно подчеркнуть!

Создадим сразу несколько переменных с разным текстом:

$text = 'This is do a test - "do do do"';
$text_1 = 'Это тестовый текст в котором есть повторяющееся слово текст';
$text_2 = 'Это слово и тестовый текст в котором есть повторяющееся слово и слово текст';
$text_3 = 'Это слово и тестовый текст в котором есть повторяющееся слово и слово это текст ';

Разбиваем текст по пробелу с помощью explode

Далее нам потребуется два цикла. Внутри второго чикла пишем условие, если слово в массиве будет повторяться, то создаем счетчик, по имени слова:

Далее следующее условие, если счетчик будет равен 2, то прерываем цикл :

Создаем третий цикл, в котором, как только встретится слово найденное в предыдущих двух циклах, то сразу его выделим цветом слово в массиве с помощью тега mark

for ($d = 0; $d Добавлено. в условии and $ex [$i][2] - (2 - 1 = 1) количество символов, отсекать одинарные буквы. Если требуется отсечь предлоги с двумя и менее буквами - $ex [$i][2]

Выведем результаты, нахождения первого повторяющегося слова в тексте :

Пример функции, которая найдет в тексте первое встречающиеся слово и выделит его :

This is do a test - "do do do"

Это тестовый текст в котором есть повторяющееся слово текст

Это слово и тестовый текст в котором есть повторяющееся слово и слово текст

Это слово и тестовый текст в котором есть повторяющееся слово и слово это текст

Сохранил старый текст на картинке и дальше расскажу зачем. и сравните 4 строку на скрине и выше идущую строку №4:

Пример функции, которая найдет в тексте первое встречающиеся слово и выделит его :

Пример функции, которая найдет в тексте первое встречающиеся слово и выделит его : Как решил задачку.

Написал я данную функцию.

И мне нужно было куда-то ехать.

Сел на сиденье и. тут меня осенило, совсем простой способ, чтобы мы могли найти и сравнивать слово в массиве и повторяющееся слово, их просто нужно привести к одному регистру. Вроде бы такая элементарная вещь, но как-то она сразу мне не пришла в голову.

И такая функция вполне способна решить проблему "ПРОПИСНЫХ" букв в начале предложения!

Поэтому следующий пункт, где я занимался какими-то извращениями просто не нужен!

Замена слов в скобках php

Тут встретился поисковый запрос - Замена слов в скобках php - я не знаю, что конкретно вы имели ввиду задавая такой вопрос поисковику, но я тут вспомнил, замечательную фишку. которую уже использую с незапамятных времен.
В чем фишка!? Как это работает . например, очень частое применение разных ссылок, привело меня к мысли, что надо создать скрипт, который будет обрабатывать, слово в скобках.

Если напишу вот так : php в коде. либо css , то никаких квадратных скобок вы не увидите. смотри скрин ниже:

Замена слов в скобках php

Замена слов в скобках php

После обработки php скриптом, это будут обычные ссылки, слова в скобках были заменены на :

В первом случае с php:

Во втором случае с css:

Таких слов огромное количество и естественно, что запомнить их все невозможно, поэтому у меня есть кнопка, которая выводит все эти слова в других кнопках, и достаточно кнопку нажать - она вставляется с помощью скрипта js.

Поскольку довольно редкий поисковый запрос. напишите - вам интересен этот скрипт?!

Онлайн нахождение первого и повторяющихся слов

Далее мы используем форму для ввода данных, внутри уже расположен какой-то текст.

Необходимо выбрать, что будем искать :

Найти первое повторяющиеся слово в тексте. и

Найти все повторяющиеся слова в тексте.

Выбираем режим - нажимаем найти!

Скрипт - найти все повторяющиеся слова в тексте и выделить их.

Через некоторое время пришлось вернуться к этой теме, поскольку поиск всех повторяющихся слов работал несколько некорректно!

Это уже реализовано и внедрено выше пунктом - поиск всех повторяющихся слов.

Не буду рассказывать всю функцию.

А лишь основное:

Алгоритм нахождения всех двойных слов и подсветка.

Возьмем из скрипта - нахождение первого повторяющегося слова - первый цикл, удалим break;

И добавим - выделено красным(1,3) - создание массива с повторяющимися словами.

Отсекаем предлоги в два и менее знака( and $ex [$i][2] ).

for ($i = 0; $i and $ex [$i][2] )

Далее нам придется решить, как искать и сравнивать повторяющиеся такие слова, как возьмем слово "лампа" :

лампа и лампа(и любой знак препинания и др.знаки)

лампа и лампа(и любой тег html, например перенос <br>)

В общем можно много и дого рассказывать -см выше - "найти все повторяющиеся слова".

Поисковые запросы.

Php найти слово в скобках

Поисковый запрос - "php найти слово в скобках", к сожалению, этого недостаточно, найти и. что сделать!?

php найти слово в скобках - подчеркнуть!? На странице рассмотрели нахождение повторяющегося слова

php найти слово в скобках - удалить!?

php найти слово в скобках - заменить!? Также была тема замены слова в скобках(скобки без разницы какие, нужно в скрипте это прописать)

php найти слово в скобках - получить текст внутри скобок. Для данного вопроса, необходимы уточнения. первое ли вхождение в строке, либо все вхождения в строке.

Заменить N-ый символ в строке php

Поисковый запрос "заменить 5 символ в строке php", "заменить 2 символ в строке php" - в общем объединим, данные поисковые запросы в один: "Заменить N-ый символ в строке php"
Как это сделать!? Если речь идет о "кириллице в utf-8", то придется поднапрячься.

А если для латиницы, то вообще легко.

Раз уж пошла речь о замене 5, то и возьмем это число и фразу:

Загоним наш т@.@. �� ���.`.� `.му элементу строки, как к ячейке массива и поставим туда, какой-то знак, пусть это будет вопросительный .

Вопрос на засыпку. почему нельзя таким образом заменить символ на несколько символов. что произойдет!?

Заменить N-ый символ на любое количество знаков.

Если вы не ответили на вопрос, почему нельзя заменить один символ на несколько символов, то ответ простой! Символ можно заменить только на 1 символ! Иначе структура переменной поломается. и замену не увидите, и все, что после этого символа, вместе с символом.

А если нужно N-ый символ строки заменить на слово!?

На предложение и т.д. да на что угодно.

Разобьем(explode) строку в массив, по тому символу, который хотим заменить :

Соединим(implode) массив в строку, в первое значение помещаем все то, на что хотим заменить. Либо туда переменную.

Функция str_replace в php нужна для замены подстроки в строке.

У функции следующие параметры:

Замена подстроки

Пример: заменим bbb на zzz:

Мы заменили "bbb" на "zzz" и в $result запишется строка "aaa zzz ccc zzz ddd". У нас было 2 вхождения подстроки bbb и мы заменили их на zzz.

А что если нам нужно также заменить и ccc на zzz? Мы бы конечно могли запустить функцию 2 раза, в первый раз заменив первую подстроку, а второй раз другую, но можно просто указать массив подстрок поиска первым параметром.

Пример: заменим bbb и ccc на zzz:

Что если нам нужно заменить bbb на zzz, а ccc на www?

Мы конечно снова можем запустить функцию 2 раза, но оптимальнее с точки зрения производительности будет и вторым параметром передать массив. В первом массиве будут подстроки, которые мы ищем, а во втором те, на которые заменяем.

Пример: заменяем bbb на zzz, а ccc на www:

Результат у нас правильный, но читабельность конечно страдает. А представьте если бы мы указывали сразу 50 таких строк для замены? И потом когда мы добавляем или заменяем строку, ее приходилось бы искать в 2 местах.

Более читабельным был бы код:

Тут нам помогли функции array_keys и array_values которые вернули все ключи и все значения соответственно. Кстати для подобной замены вам не обязательно использовать функцию str_replace, а можно воспользоваться strtr, и тогда наш код выглядел бы еще более просто:

У функции str_replace также есть четвертый параметр $count, в котором мы ничего не передаем, а наоборот получаем количество вхождений.

Таким образом если дополнить наш пример:

Удаление подстроки

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

Удалим xx из нашей строки:

Другие примеры

Рассмотрим еще несколько примеров:

Эта функция не поддерживает регулярные выражения, но для этого есть другая функция: preg_replace()

Более мощная альтернатива: preg_replace

С помощью функции preg_replace вы можете осуществлять замену по регулярном выражению. Если вам не хватает возможностей str_replace, то обратите внимание на эту функцию.

Продвинутая работа со строками

Если вы часто работаете со строками, то возможно вам пригодятся более высокоуровневые методы для их обработки.

Взгляните как будут выглядеть поиск и замена строк с помощью symfony/string:

Как видите здесь есть много полезных методов, для написания которых мы с вами могли бы потратить много времени. Посмотрите также другие полезные примеры работы с symfony/string

Я с трудом пытаюсь заменить этот странный правильный символ одинарной кавычки. Я использую str_replace вот так:

str_replace("’", '\u1234', $string);

Похоже, я не могу понять, какой характер имеет эта цитата На самом деле. Даже когда я копирую его прямо из PHPMyAdmin, он все равно не работает. Должен ли я каким-то образом избежать этого?

  • Кодировка MySQL: UTF-8 Unicode (utf8)
  • MySQL параметры сортировки: utf8_unicode_ci
  • <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

EDIT: Это оказалась одиночная цитата Microsoft left, которую я мог бы заменить этой функцией из комментария Филла Паффорда. Не уверен, какой ответ я должен отметить сейчас..

Я уже час пытаюсь заставить замену работать. На самом деле нет никаких причин, почему это не должно работать, но это просто не работает. echo $title22; $title22 = str_replace('–','dsdas',$title22); echo $title22; выход: Something – something else Something – something else Я предполагаю, что.

Мне нужно использовать скрипт PHP для замены 7-го символа поля ввода формы HTML. Напр.. A234591Q Стать A23459IQ Замена цифры 1 на букву I. Проблема в том, что у меня нет доступа к файлу сценария php, поэтому мне нужно сделать это на странице HTML в качестве данных типов клиентов или во время.

Со мной тоже такое случалось. Пара вещей:

Используйте функцию htmlentities для вашего текста

$my_text = htmlentities($string, ENT_QUOTES, 'UTF-8');

Используйте правильный тип документа, это сделало трюк для меня.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

Используйте тип кодировки utf-8 на своей странице:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Вот окончательный прототип вашей страницы:

Однако, если вы хотите заменить его, попробуйте функцию mb_ereg_replace .

Пример:

У меня была та же проблема, и я обнаружил, что это работает:

Чтобы узнать, что это за символ, запустите его через функцию ord , которая выдаст вам код символа ASCII:

Теперь, когда вы знаете, что это такое, вы можете сделать это:

Чтобы заменить его:

Если ваш файл сценария закодирован в той же кодировке, что и данные, в которых вы пытаетесь выполнить замену, он должен работать так, как вы его разместили. Если вы работаете с данными UTF-8, убедитесь, что сценарий закодирован в UTF-8, и это не ваш редактор, который молча транслитерирует символ при его вставке.

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

Чтобы избежать этого:

Если ваш исходный файл закодирован в UTF-8, это должно сработать:

по умолчанию набор символов html. равен iso-8859-1 . Все, что отличается от этого, должно быть четко указано.

Для более сложных проблем преобразования символов всегда проверяйте примечания пользователя к таким функциям, как htmlentities() , там часто можно найти настоящие драгоценные камни.

в общем:

Бобинс прав в своем комментарии: системные проблемы с набором символов должны систематически сортироваться, чтобы они не кусали вас за задницу - хотя бы путем определения того, какой набор символов используется на каждом этапе пути:

  • Как кодируется файл сценария;
  • Как подается документ;
  • Как данные хранятся в базе данных;
  • Как кодируется соединение с базой данных.

Я искал уже некоторое время и не смог ничего придумать. У меня есть страница, которая содержит как html, так и php. <div>%%replace_me%%</div> <? replaceStr(replace_me, foobar); ?> Мне нужна функция, которая изменила бы приведенную выше строку %% в foobar, чтобы сделать html.

Моя проблема заключается в том, как получить подстроку от символа до символа в php. Я уже пробовал это сделать : <?php $str = I love my family; echo substr($str, 'm', strpos($str, 'y')); ?> Он показывает следующую ошибку: Message: substr() expects parameter 2 to be long, string given.

Если в коде PHP используются символы, отличные от ASCII, необходимо убедиться, что вы используете ту же кодировку символов, что и в обрабатываемых данных. Ваша попытка, вероятно, не удалась, потому что вы используете другую кодировку символов в скрипте PHP, чем в $string .

Кроме того, если вы используете многобайтовую кодировку символов, такую как UTF-8, вы также должны использовать многобайтовые строковые функции .

Почему бы не запустить строку через htmlspecialchars() и не вывести ее, чтобы увидеть, во что она превращает этот символ, чтобы вы знали, что использовать в качестве выражения замены?

Не используйте никаких функций regex ( preg_replace или mb_ereg_replace ). Они слишком тяжелы для этого.

Если ваша игла является многобайтовым символом, вам может повезти с этой функцией на заказ:

Этот символ, который у вас есть, является правильной одинарной кавычкой .

Чтобы заменить его шаблоном, вы захотите сделать что-то вроде этого

Но на самом деле это касается только симптома. Проблема в том, что у вас нет последовательного использования кодировок символов во всем приложении, как отмечали другие.

Вы можете получить код char ascii с помощью ord , а затем заменить его нужным символом:

Похожие вопросы:

У меня есть объект с userGuid в качестве свойства. Свойство userGuid имеет значение Guid , заключенное в двойные кавычки. Я использовал метод replace() , но он заменяет только первое вхождение.

Я хочу заменить первое вхождение символа в парах. Например: возьмите (define n '((a . b) . (a . d))) и я определяю контекст метода, чтобы заменить первый экземпляр (самый левый) X на '() замена а.

Я уже час пытаюсь заставить замену работать. На самом деле нет никаких причин, почему это не должно работать, но это просто не работает. echo $title22; $title22 = str_replace('–','dsdas',$title22);.

Мне нужно использовать скрипт PHP для замены 7-го символа поля ввода формы HTML. Напр.. A234591Q Стать A23459IQ Замена цифры 1 на букву I. Проблема в том, что у меня нет доступа к файлу сценария.

Я искал уже некоторое время и не смог ничего придумать. У меня есть страница, которая содержит как html, так и php. <div>%%replace_me%%</div> <? replaceStr(replace_me, foobar); ?>.

Моя проблема заключается в том, как получить подстроку от символа до символа в php. Я уже пробовал это сделать : <?php $str = I love my family; echo substr($str, 'm', strpos($str, 'y')); ?> Он.

Я пытаюсь заменить определенную строку некоторым кодом PHP, используя функцию str_replace . Я хочу заменить [GOOGLE] на <?php echo hello; ?> Вот что у меня есть до сих пор: $text =.

Как заменить первые три символа строки в oracle. Допустим, у меня есть 100 записей идентификатора сотрудника, мне нужно заменить первые три символа записей от 30 до 50 из 100.

Как я могу заменить символ � - это символ, найденный в Юникоде, на двойную кавычку в Marklogic. Я нашел тысячи документов (формат xml), в которых специальный символ появляется в узлах случайных.

Читайте также: