powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) str_replace - не всегда заменяет подстроки
16 сообщений из 16, страница 1 из 1
(PHP) str_replace - не всегда заменяет подстроки
    #33711754
irkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток.
Возникла проблемка: есть скрипт, который должен выполнять подстановку данных в документе (заменять заполнители вида !!!12!!! необходимыми данными).

фрагмент кода
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
$output=str_replace('!!!1!!!', $name, $output);
$output = str_replace('!!!2!!!', $adr, $output);
$output = str_replace('!!!3!!!', $acc, $output);
.
.
.
.
$output = str_replace('!!!20!!!', $vart, $output);
, где $output - файл в формате rtf. И иногда в файле после выполнения скрипта можно встретить конструкции вида !!!2!!!, т.е. замены не происходит, причем не во всех местах, где встречается этот заполнитель (!!!2!!!), а только в некоторых. Происходит это не всегда (бывает, что все работает без проблем), систему возникнования ошибки определить не могу.
Подскажите, пожалуйста, с чем это может быть связано.
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33711938
zg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irkovПодскажите, пожалуйста, с чем это может быть связано.у меня один раз было: при замене русских букв, буковка "Б" заменялась через раз, а иногда вместо неё конец строки вылазил. Чем то объяснить это не смогли, потому что замена происходила абсолютно хаотично и не всегда, решили проблему регулярными выражениями. В принципе можно и тебе попробовать использовать функцию preg_replace:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<?

$replaced = array
(
	'/!!!1!!!/'  => $name,
	'/!!!2!!!/'  => $adr,
	'/!!!3!!!/'  => $acc,
	'/!!!20!!!/' => $vart,
);

$outpout = preg_replace( array_keys($replaced) , $replaced, $outpout );

?>
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33711939
zg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ой очепятка, извиняюсь, нада так
Код: plaintext
1.
output = preg_replace( array_keys($replaced) , $replaced, $output );
$outpout => $output
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33711960
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Вырезание гланд через задний проход.
Ну и нахрена здесь регулярки? Гвозди мелкоскопом забивать можно, только молоток для этого более подходящ.
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33711963
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
irkovПроисходит это не всегда (бывает, что все работает без проблем), систему возникнования ошибки определить не могу.Вообще не происходит.Подскажите, пожалуйста, с чем это может быть связано.С тем, что вы ожидаете найти ошибку там, где её нет. Ищите косяк в своём скрипте.
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33712113
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
zg *Ну и нахрена здесь регулярки?обработка текста регулярками идёт намного быстрее и эффективней любых других функцийВы делали замеры? Или дадите ссылки на авторитетные источники?и к слову str_replace - тоже в качестве "что заменяем" получает регулярное выражение...Наверно эти выводы были получены на основе изучения исходного кода сырцов PHP? Ссылку на lxr.php.net, где из кода было бы видно, что str_replace делается через жо..., ой, простите, через регулярные выражения, в студию.preg_replace улучшенная её версия и работает намного быстрееЭтот бред я пропущупри этом кучу вызовов str_replace можно заменить одним вызовом preg_replaceТо, что вы предложили, вы называете "заменить кучу str_replace на один preg_replace"? В мануал заглядывать никогда не пробовали?
mixed str_replace ( mixed search, mixed replace, mixed subject [, int &count] ) zgплеваться каждый может, а решить проблему? я предлагаю варианты решения проблемы, каким пользоваться дело лично каждогоЧтобы решить проблему, надо её хотя бы воспроизвести. Вы же не разобравшись в ней предложили зарыть голову в песок. И далеко не факт, что зарывание головы в песок проблему решит. Не говоря о том, что это просто "не наш метод" - программист должен думать головой, а не прятать её в песках.
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33712423
irkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
header('Content-type: application/msword');
header('Content-Disposition: inline, filename=tnall.rtf');

$fp=fopen($filename, 'r');
$output = fread($fp, filesize($filename));
fclose($fp);

$output=str_replace('!!!1!!!', $name, $output);
$output = str_replace('!!!2!!!', $adr, $output);
.
.
.
$output = str_replace('!!!20!!!',$vart, $output);

echo $output; 

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

Про регулярные выражения думала, если ничего другого не останется, то попробую, но все же хотелось бы разобраться в проблеме со str_replace() - очень не люблю, когда остаются какие-то нерешенные вопросы, которые имеют тенденцию потом вылезать боком в самые неподходящие моменты.
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33712893
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа, конструктивно участвуйте в форуме. мессаги, которые не относятся к теме топа - удалил.
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33713666
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
irkovЯ думаю, что если бы ошибка была в скрипте, он вообще не работал бы корректно, а в данном случае он может неделю нормально работать, а потом несколько дней глючить.Т.е. вы утверждаете, что при одном и том же содержимом файла $filename и одних и тех же значениях для замены (т.е. при одинаковых условиях) скрипт каждый раз работает по разному? Или вы этого не утверждаете? Если второе - так бегом искать неблагоприятные условия и выяснять, в чём дело - в FAQ по отладке посылать или сами найдёте?
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33713960
irkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я утверждаю, что он так работает далеко не каждый раз (за последние 2 недели было 3 сбоя). В процессе написания и отладки эта проблема у меня в принципе не возникла ни разу. FAQ по отладке я знаю, но он никак не объясняет ситуацию, если, например, !!!2!!! встречается в шаблоне раз 5, и в 4 местах замена происходит, а в пятом - нет).
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33713972
Фотография 4m@t!c
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версии ПО укажите.
Повторный парсинг текста с ошибкой решает проблему или нет?
----------------------------------------
Артисты не приехали, приехали цыгане
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33713986
irkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Версии:
Windows XP sp2
Apache 1.3.31
php 4.3.10

При повторном запуске с теми же значениями переменных ошибки не возникает.
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33714046
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
irkovПри повторном запуске с теми же значениями переменных ошибки не возникает.Значит проблема-то не в том, что PHP работает когда как повезёт.
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33714051
*
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
*
Гость
Тьфу млин. Неправильно понял походу.
В любом случае - в таких случаях принято давать минимальную программу, воспроизводящую проблему + (желательно минимальный) набор входных данных, на которых эффект воспроизводится. Иначе гадать можно бесконечно долго.
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33714057
irkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я понимаю, что гадание, как правило, не помогает,но не существует входных данных, с которыми эта ошибка гарантировано появляется. Как я уже написала, при одних и тех же данных при повторном запуске программы ошибка не возникает, т.е. четкая система возникновения ошибки отсутствует напрочь.
Попробую сейчас сделать демо-скрипт с входными данными.
...
Рейтинг: 0 / 0
(PHP) str_replace - не всегда заменяет подстроки
    #33714089
irkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пример демо-скрипта и шаблона (шаблон на украинском языке).
Запускала раз 20, работало все без глюков.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / (PHP) str_replace - не всегда заменяет подстроки
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]