Замяна на текст в стринг на PHP

StefanIvanov

New Member
Здравейте, опитвам се да направя нещо на PHP, но не ми се получава. Става въпрос за замяна на текст в стринг с динамично съдържание, което винаги започва по един начин и завършва пак по един начин, а аз искам да променя това, което е динамично.

Ясно ми е, че със str_replace() може да се промени част от текста, но в случая става въпрос за променящо се съдържание:

Ето пример:

phrase1_xxxxx_phrase2 - това е текста ми, при който phrase1 и phrase2 винаги са едни и същи, а текста xxxxx се променя. Целта ми е да махна xxxxx и да остане само това "phrase1phrase2".

Има ли начин със str_replace да задам начало и край на промяната, като същевременно да изчезне и динамичния текст, ако не - по какъв друг начин да направя това нещо?
 
От: Замяна на текст в стринг на PHP

Ами цялата работа е в това, че става работа за един сайт, на който трябва да му променя едни линкове, но 2 часа се опитвах да разбера от къде се генерират и не можах. Затова накрая реших просто да променя изходния резултат. Излизат ми грешни url адреси в резултатите от търсенето, като излиза категорията преди името на публикацията: http://сайт/категория/продукт/име . Този адрес не работи правилно, а като се отвори http://сайт/продукт/име - тогава работи. Всичко е писано по някакъв странен начин и въобще не разбрах от къде се генерира, а категорията е различна за различните продукти и затова не мога да я сменя със str_replace. Естествено, мога да направя отделна проверка за всяка една категория, но тогава става сложно, защото като се смени името на категорията и ще трябва наново да се преправя кода.

Затова си мислех дали няма някакъв начин да се направи проверка и да се махне текста, който е между "сайт" и "продукт" - точно там е динамичната категория. Накрая има "име" което е името на самия продукт, то също е динамично, но него не трябва да го променям.
 
От: Замяна на текст в стринг на PHP

1. Отговор конкретно на въпроса за PHP - preg_replace е твоята фунцкция.
2. Смислен отговор - не лекувай симптомите, оправи първопричината!
 
От: Замяна на текст в стринг на PHP

1. preg_replace както казаха и предните.
2. Да не би да имаш някакво кеширане което да пише URLите в някоя таблица. Я си виж таблиците в базата. Ако наистина имаш такава таблица я си огледай кое query ти пише в тая таблица и тръгни нагоре да гледаш къде се използва тоя метод и рано или късно ще намериш от къде ти се объркват URLите.
 
От: Замяна на текст в стринг на PHP

Ето пример:

phrase1_xxxxx_phrase2 - това е текста ми, при който phrase1 и phrase2 винаги са едни и същи, а текста xxxxx се променя. Целта ми е да махна xxxxx и да остане само това "phrase1phrase2".

Има ли начин със str_replace да задам начало и край на промяната, като същевременно да изчезне и динамичния текст, ако не - по какъв друг начин да направя това нещо?

Ето ти и примерно решение на въпроса с php 5.3+:

PHP:
$output = 'phrase1_xxxxx_phrase2, phrase1_bla1_phrase2, phrase1_blabla2_phrase2, phrase1_blabla3_phrase2';

$output = preg_replace_callback('~(?<=phrase1).+?(?=phrase2)~s', function(&$dynamic_content) {$dynamic_content = null;}, $output);

echo $output;

Разбира се това е само пример, надали в твоя случай ще бъде 1:1, може да се добавят и preg_quote и режим/флаг unicode в зависимост от съдържанието на фразите.
 

Горе