#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. Привет, Бенджи, спасибо за твой ответ. Оказывается, что во время моей отладки я случайно забыл, что я продублировал код в своем скрипте. Оказывается, он работал все это время, но выдавал неверный результат, потому что его запускали дважды. Еще одна причина, по которой снимать проблемы поздно ночью — плохая идея! Еще раз спасибо за вашу помощь!