PHP - удаление тегов <? Php?> Из строки - PullRequest
5 голосов
/ 01 июля 2010

Каков наилучший способ удалить эти теги из строки, чтобы подготовить их для передачи в eval ()?

например. строка может быть примерно такой:

<?php
  echo 'hello world';
  ?>
  Hello Again
  <?php

  echo 'Bye';
?>

Очевидно, что str_replace не будет работать, потому что два php-тега в середине должны быть там (1-й и последний должны быть удалены)

Ответы [ 4 ]

4 голосов
/ 01 июля 2010

Обычно вы не хотите передавать функцию в eval.Если вы хотите просто удалить теги, string_replace отлично справится с этой задачей, однако вам лучше использовать регулярное выражение.

preg_replace(array('/<(\?|\%)\=?(php)?/', '/(\%|\?)>/'), array('',''), $str);

Это относится к тегам old-asp, php короткие теги, php echo-теги и обычные php-теги.

4 голосов
/ 01 июля 2010

Звучит как плохая идея, но если вы хотите удалить начальную и конечную, вы можете сделать

$removedPhpWrap = preg_replace('/^<\?php(.*)(\?>)?$/s', '$1', $phpCode);

Это должно сделать (не проверено).

Пожалуйста, скажите мне также, почему вы хотите это сделать, я на 95% уверен, что есть лучший способ.

1 голос
/ 04 февраля 2017

Вы можете сделать:

eval("?> $string_to_be_evald <?");

, который закроет неявные теги и заставит все работать.

1 голос
/ 10 марта 2013

Нет необходимости использовать регулярные выражения; PHP предоставляет функции для удаления символов из начала или конца строки. <a href="http://php.net/ltrim" rel="nofollow">ltrim</a> удаляет символы из начала строки, <a href="http://php.net/ltrim" rel="nofollow">rtrim</a> из конца строки и <a href="http://php.net/ltrim" rel="nofollow">trim</a> с обоих концов.

$code = trim ( $code );
$code = ltrim( $code, '<?php' );
$code = rtrim( $code, '?>' );

Первый trim() удаляет все начальные или конечные пробелы, которые присутствуют в размещении. Если мы пропустим это и в строке есть вне тегов PHP в строке, то команды ltrim и rtrim не смогут удалить теги PHP.

...