我有一个像这样的数组。
ARRAY[0][DATAROOTNEW.PROPIEDADES.OPERACION][0]
ARRAY[0][DATAROOTNEW.PROPIEDADES.HABITACIONES][0]
ARRAY[0][DATAROOT.PROPIEDADES.BANO][0]
ARRAY[0][DATAROOT.PROPIEDADES.TITULO][0]
我有一个PHP代码,用于检查提供的字符串是否为PHP脚本并使用eval()执行。代码如下
$result='';
$is_php=false;
$pos=strpos($item,'PHP:');
if($pos===0){
$is_php=true;
$code=str_replace('PHP:','',$item);
$pos=strpos($code,$base_name_feed);
if($pos>=0){
foreach($keys as $k){
$code=str_replace('['.$k.']','$this->ARRAY['.$current_item.']["'.$k.'"][0]',$code);
}
}
}
if($is_php){
echo '<p>'.$code.'</p>';
eval($code);
}
我提供给代码的字符串是这样的
if([DATAROOTNEW.PROPIEDADES.HABITACIONES] >=1 or [DATAROOTNEW.PROPIEDADES.BANOS]>=1) { if($this->IdCategoria=='') $this->setIdCategoria(); $result="cat".$this->IdCategoria."_1[;;]Detail_Rooms[;;]DOUBLE[;;]".[DATAROOTNEW.PROPIEDADES.HABITACIONES]."[;;]0[;;;]cat".$this->IdCategoria."_2[;;]Detail_Bathrooms[;;]DOUBLE[;;]".[DATAROOTNEW.PROPIEDADES.BANOS]."[;;]0"; } else $result='';
所以我的代码替换了与数组匹配的所有字符串。并将其作为有效代码。
$code=str_replace('['.$k.']','$this->ARRAY['.$current_item.']["'.$k.'"][0]',$code);
问题是如果数组中不存在密钥,代码将变为无效,因为替换语句将无效。
我的问题是我应该如何验证这一点,以便Eval()
不执行?