2012-10-05 1 views
0

내가 PHP의 기본 구문과 도움이 필요 vriable 값을 PHP로 하위 문자열을 교체로 보낼 수는 <p></p> 나는 다음과 같은 문자열을 가지고, 평가()와

나는 변수를 가지고 : 실제로 사용 str_replace('replace', $var, $str);

는 내가 뭘하려고 오전입니다 :로 $var = "VariableValue";

과 st_replace 기능을 같은 somehing의 평가 : 그래서

if(eval($str)){//This should now make the if condition **look like**    
       //if(strlen(*'VariableValue'*)...) 
       // 

echo 'Success'; 

}else{ 

    echo 'Ask the guys at StackOverFlow :),sure after searching for it'; 
} 

당신은 무엇을 알 경우 경우 (나 strlen ('VariableValue') ...)이 내가 문을 평가 한 후 바르가 포함 된 경우 마지막을 할 수 있도록 할 것입니다 그래서이를 처리 실제로 나 strlen 따옴표 값,

나는 내가 필요로 명확로 :) 사전에

감사

답변

1

내가 추가 한이

$str = "return (strlen(##replace##) <= 5 && strlen(##replace##) >= 1);"; 
$var = 'test'; 

// you have to assign the str_replace to $str again. And use " around the $var. 
$str = str_replace('##replace##', '"' . addslashes($var) . '"', $str); 

if (eval($str)) {    
    echo 'Success'; 
} 
else { 
    echo 'Ask the guys at StackOverFlow :),sure after searching for it'; 
} 

처럼 시도를 ## 항상 대체 다소 고유 한 문자열을 가지고하는 것이 좋습니다 때문에 주위 교체 ... 예를 들어, str_replace을 포함하도록 eval'd 코드를 확장하면 너무 바뀝니다.

편집 Erbureth의 코멘트 @를 따라 addslashes으로 $ var에를 탈출했다.

+1

따옴표 나 다른 제어 문자가 포함되어있는 경우 변수 문자열을 이스케이프 처리해야합니다. – Erbureth

+0

대단히 감사합니다. eval을 사용하지 않고 수행하려고하는 다른 방법이 있다고 생각하십니까 (단, 같은 기법으로 만 사용) –

+0

@arkascha가 다른 대답에 언급했듯이 변수를 직접 사용하면 if (eval ($ code)) {...} 대신에 if (strlen ($ var) <= 5 && strlen ($ var) > = 1) {...}' – SJFrK

1

aYou가 (평가 후면 필요가 없습니다) 그것을 위해 (이유가 그것 인 이유 만든 희망 때때로 악이라고 불리는 ...).

그냥 그런 상태 시도 :

if ((strlen($var) <= 5) && (strlen($var) >= 1)) 
+0

사실, 이것은 eval에 좋지 않습니다.하지만 eval이 순수한 악의를 낳았으며 유스 케이스가 없다면 여전히 주위에있을 수 없습니다. 또는 적어도 PHP 5.4에서는 더 이상 사용되지 않습니다. – SJFrK

+0

@SJFrK : 나는 결코 그것이 순수한 악이라고 주장하지 않았습니다. – arkascha

+0

미안하지만 나는 무례한 소리로 들렸다. 그건 내 의도가 아니었다. 나는 단지 선과 악에 대한 모든 전쟁을 좋아하지 않으며, 데이터베이스 테이블 이름은 복수 또는 단수로, 같은 줄 또는 다음 줄에 중괄호를 여는 것입니다. – SJFrK