У меня проблема с памятью при тестировании функции поиска / замены.
Скажите, что тема поиска:
$subject = "<p>I wrote an article in the A+ magazine.
It'\s very long and full of words.
I want to replace every A+ instance in this text by a link
to a page dedicated to A+.</p>";
найденная строка:
$find='A+';
$find = preg_quote($find,'/');
обратный вызов функции замены:
function replaceCallback($match)
{
if (is_array($match)) {
return '<a class="tag" rel="tag-definition" title="Click to know more about ' .stripslashes($match[0]) . '" href="?tag=' . $match[0]. '">' . stripslashes($match[0]) . '</a>';
}
}
и звонок:
$result = preg_replace_callback($find, 'replaceCallback', $subject);
теперь полный искомый шаблон взят из базы данных. На данный момент это:
$find = '/(?![^<]+>)\b(voice recognition|test project reference|test|synesthesia|Superflux 2007|Suhjung Hur|scripts|Salvino a. Salvaggio|Professional Lighting Design Magazine|PLDChina|Nicolas Schöffer|Naziha Mestaoui|Nabi Art Center|Markos Novak|Mapping|Manuel Abendroth|liquid architecture|LAb[au] laboratory for Architecture and Urbanism|l'Arca Edizioni|l' ARCA n° 176 _ December 2002|Jérôme Decock|imagineering|hypertext|hypermedia|Game of Life|galerie Roger Tator|eversion|El Lissitzky|Bernhard Tschumi|Alexandre Plennevaux|A+)\b/s';
Этот шаблон $ find затем ищется (и заменяется, если найден) в 23 столбцах в 7 таблицах mysql.
Использование предложенного preg_replace () вместо preg_replace_callback (), похоже, решило проблему с памятью, но у меня возникли новые проблемы по пути: в теме, возвращаемой preg_replace (), отсутствует много контента ...
UPDATE:
потеря содержимого происходит из-за использования preg_quote ($ find, '/');
Теперь он работает, за исключением ... «A +», который становится «A» после процесса.