$t = 'echo "<p>: $te </p>";';
$te = 'etst';
eval ($t);如上..我想达到的效果就是上面的结果..
eval太危险了..有没有别的办法呀.
在线等!

解决方案 »

  1.   

    eval 没有什么危险的,他执行的都是你自己构造的代码。
    如果连自己都成了危险,那我也就无语了如果将同样的代码写入文件,然后 include 进来。按你的观点是否就安全了呢?eval 唯一的缺点是他所执行的代码未经预编译,临时编译必然影响效率当然并不是非要用 eval 的,比如$t = '<p>: $te </p>';
    $te = 'etst';echo preg_replace('/\$\w+/ise', '$0', $t);
    输出 <p>: etst </p>有点“模板”的味道了
      

  2.   

    哎...看来没有什么简便方法了.
    eval里的数据是ajx过来的..不敢直接eval.
    只有正则了
      

  3.   

    eval危险?????你用到的模板里支持php语法不就靠这个吗
      

  4.   

    不是..eval不危险..是数据不是我自己构的(ajax过来的)...所以危险!
      

  5.   

    类似的就行$code = 'echo 123;mysql_connect("localhost", "root", "root");';// 获取执行代码中的方法
    $r = '#(\w+)\([^)]*\);#';
    preg_match_all($r, $code, $funcArr);
    //echo '<pre>';print_r($funcArr);exit;
    // 设置可以被执行的方法或者不可以被执行的方法等
    $allows = array('echo', 'print', 'print_r', 'var_dump');
    // 或者
    //notAllows = array('mysql_connect', 'unlink', ...);if($funcArr[1]){
    foreach($funcArr[1] as $func)
    {
    if(!in_array($func, $allows))
    {
    exit('您正要执行无权限的代码,已经终止!');
    }
    }
    }eval ($code);
      

  6.   

    我最终的做法是
    preg_replace('/\{(\$\w+\[?[\d\w]?\]?)\}/ise', '$1', $v)谢谢了.xuzuning