проблемы с preg_replace

#preg-replace

#preg-replace

Вопрос:

Я борюсь с этим регулярным выражением.

 $glossary_search[] = "/(^|>|\s)".$glossary["glossary_name"]."($|<|\s)/i";
$glossary_replace[] = "$1<a href='/jargon-buster/".tapestry_hyphenate($glossary["glossary_name"]).".html' title='".$glossary["glossary_name"]."' target='_blank'>".$glossary["glossary_name"]."</a>$2";

return preg_replace($glossary_search,$glossary_replace,$text);
 

Я пытаюсь заменить слова в описании продукта гиперссылкой. Приведенный выше код работает, если слово имеет пробел с обеих сторон, но не работает, если в нем есть точка, запятая или «<«. Кто-нибудь может заметить мою ошибку?

Спасибо, Саймон

Комментарии:

1. Можете ли вы предоставить простую строку ввода и желаемый результат?

Ответ №1:

Я думаю, вам может понадобиться использовать preg_quote и htmlentities ?

 $glossary_search[] = "/(^|>|\s)".preg_quote(htmlentities($glossary["glossary_name"],ENT_COMPAT,'UTF8'))."($|<|\s)/i";
$glossary_replace[] = "$1<a href='/jargon-buster/".tapestry_hyphenate($glossary["glossary_name"]).".html' title='".$glossary["glossary_name"]."' target='_blank'>".$glossary["glossary_name"]."</a>$2";

return preg_replace($glossary_search,$glossary_replace,$text);
 

Комментарии:

1. Привет, Бенджи, спасибо за твой вклад. Это работает, но только в той же степени, что и исходный код. Когда что-либо появляется непосредственно после слова, это не работает. Сам по себе, и он работает отлично.

2. Можете ли вы привести пример этой переменной $glossary и переменных $text, которые работают и не работают?

3. Привет, Бенджи, спасибо за твой ответ. Оказывается, что во время моей отладки я случайно забыл, что я продублировал код в своем скрипте. Оказывается, он работал все это время, но выдавал неверный результат, потому что его запускали дважды. Еще одна причина, по которой снимать проблемы поздно ночью — плохая идея! Еще раз спасибо за вашу помощь!