У меня есть массив как-то так.
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()
не выполняет?
Задача ещё не решена.
Других решений пока нет …