PHP - 从字符串中删除<! - ?php? - >标记

时间:2010-07-01 01:55:43

标签: php string tags eval

从字符串中删除这些标记的最佳方法是什么,以准备将其传递给eval()?

例如。字符串可以是这样的:

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

  echo 'Bye';
?>

显然str_replace不起作用,因为中间的两个php标签需要在那里(第一个和最后一个需要删除)

4 个答案:

答案 0 :(得分:4)

听起来不错,但如果你想要删除开头和结尾,你可以做到

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

进行(未经测试)。

请告诉我你为什么要这样做,我95%肯定有更好的方法。

答案 1 :(得分:4)

通常,您不希望将函数传递给eval。 如果您只想删除标记,string_replace可以很好地完成工作,但是最好使用正则表达式。

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

这包括旧的asp标签,php短标签,php echo标签和普通的php标签。

答案 2 :(得分:1)

没有必要使用正则表达式; PHP提供了从字符串的开头或结尾删除字符的功能。 ltrim从字符串的结尾中删除字符串开头中的字符,并从两端删除rtrim

trim

第一个$code = trim ( $code ); $code = ltrim( $code, '<?php' ); $code = rtrim( $code, '?>' ); 删除选址中存在的所有前导或尾随空格。如果我们省略了这个,并且字符串中的PHP标记有 ,那么trim()ltrim命令将无法删除PHP标记。

答案 3 :(得分:1)

你可以这样做:

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

将关闭隐式标记并使一切正常。