Как использовать preg_replace с URL-адресом в кодировке $ _GET? - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть URL, который выглядит следующим образом https://URL.DOMAIN/blog.php?id=43&q=echo%20%27test%27.

Когда я использую <?php echo $_GET['q'] ?>, он отображает echo 'test', что я и хочу.

Я использую эту переменную внутри функции preg_replace, которая в основном сделана для применения желтого фона под согласованными строками:

preg_replace('/\b('.$_GET['q'].')\b/iu', '<span class="research-news-found">$1</span>', $news_content);

Она отлично работает для "обычных" строк, таких как "яблоко" или что-то еще, но когда есть ' внутри поискового запроса ничего не найдено.

Пример кода

$news_content = $news_display['news_description'];

if(isset($_GET['q'])){
   $news_content = preg_replace('/\b('.$_GET['q'].')\b/iu', '<span class="research-news-found">$1</span>', $news_content);
}

$news_display['news_description'] содержит текстовый вывод из БД.

1 Ответ

0 голосов
/ 10 апреля 2020

Просто сделайте шаблон жадным ? и удалите конечную границу слова \b, поскольку ' не является символом слова и является границей слова:

$news_content = preg_replace('/\b('.$_GET['q'].'?)/iu',
                             '<span class="research-news-found">$1</span>',
                             $news_content);

Демо

Но если вы надеетесь, что это на самом деле echo тест , то нет. Вам нужно будет реструктурировать свой вопрос, чтобы указать, чего вы хотите достичь, а не как заставить эту замену работать.

...