Используя PHP, как я могу применить HTMLentities () к обратной ссылке в вызове preg_replace ()? - PullRequest
2 голосов
/ 07 июня 2010

В минуту у меня есть:

$Text = preg_replace("/\[code\](.*?)\[\/code\]/s", "<mytag>\\1</mytag>", $Text);

Как я могу избежать обратной ссылки, используя htmlentities()?

1 Ответ

2 голосов
/ 07 июня 2010
$Text = "foo [code]bla<br>bla[/code] foo";

echo preg_replace_callback('/\[code\](.*?)\[\/code\]/s', 'wrap_code', $Text);

function wrap_code($matches) { 
  return '<mytag>'.htmlspecialchars($matches[1]).'</mytag>';
}

Как видно из preg_replace_callback() документации , вы также можете создать встроенную функцию обратного вызова через create_function() или с PHP 5.3.0, даже используя анонимную функцию .


Общий подход, однако, был бы таким:потому что неохотный квантификатор не будет вызываться чаще, чем необходимо:

\[(code|b|whatever)\]([^\[]+|.*?)\[\/\1\]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...