Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Тексты > str_replace не работает


Автор: dVital 11.11.2007, 00:16
Здраствуйте! Сейчас тружусь над разработкой одного скрипта, где требуется замена слов в большом объеме текста (> 100000 символов). Столкнулся с проблемой, что функция php str_replace не работает с такими большими строками. Что делать? Подскажите, пожалуйста. 

Автор: ewolf 11.11.2007, 00:40
Согласно документации php, ограничений на строки по длине практически нет (разьве что объемом оперативной памяти). Поэтому странно, чтобы str_replace имела проблемы с очень длинными строками (хотя возможно, что она обрабатывает их очень долго). Как вариант: разбивай длинную строку на несколько коротких

Автор: skyboy 11.11.2007, 01:07
dVital, может, попробуешь в самом деле разбить текст и проверить замену на кусках? ну, и хотя бы привести код, осуществляющий замену?

Автор: dVital 11.11.2007, 01:17
Разбить текст нельзя, потому что проблема в том, что заменяемое слово может оказаться поделено на 2 smile 
Код, осуществляющий замену, - состоит из вызова одной функции - str_replace. Так что не знаю, что вам приводить. 

Автор: SelenIT 11.11.2007, 01:42
dVital, уточните плз, следующие моменты:
  • В чем проявляется ошибка: данные после замены обрезаются, оказываются пустыми, срабатывает таймаут, скрипт вываливается с ошибкой, что-то еще?
  • Откуда берется исходная строка? В какой она кодировке? Не в UTF-8 случайно?
  • Откуда уверенность, что причина ошибки - именно размер строки?

Автор: dVital 11.11.2007, 01:47
SelenIT,
  • Исходная строка остается неизменной
  • Строка берется из файла, файл - Вордовский xml . 
  • Предположение...

Автор: skyboy 11.11.2007, 01:58
Цитата(dVital @  11.11.2007,  00:47 Найти цитируемый пост)
Исходная строка остается неизменной

http://www.php.net/str_replace - это функция. она не изменяет аргумент. измененный текст находится в результате вызова. Это учтено?

Автор: SelenIT 11.11.2007, 02:00
Цитата(dVital @  11.11.2007,  01:47 Найти цитируемый пост)
Вордовский xml 

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

Автор: dVital 12.11.2007, 11:20
skyboy, это да. 
SelenIT, сегодня откопаю текст программы и вынесу сюда. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)