从字符串中删除这些标记的最佳方法是什么,以准备将其传递给eval()?
例如。字符串可以是这样的:
<?php
echo 'hello world';
?>
Hello Again
<?php
echo 'Bye';
?>
显然str_replace不起作用,因为中间的两个php标签需要在那里(第一个和最后一个需要删除)
答案 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 <?");
将关闭隐式标记并使一切正常。