Eval을 사용하여 문자열에서 수학 표현식 평가
문제:
"구문 분석 오류"인 eval()을 사용하여 문자열에 저장된 수학적 표현식 이 발생하면 예기치 않은 입력 종료를 나타냅니다.
해결책:
보안 문제로 인해 일반적으로 이 목적으로 eval()을 사용하는 것은 권장되지 않지만 다음 코드는 수정하면 문제가 해결됩니다.
$ma = "2+10"; $p = eval('return ' . $ma . ';'); print $p;
eval() 함수 내에서 결과를 명시적으로 반환함으로써 코드는 완전한 결과를 기대합니다. 한 줄의 코드.
대체 솔루션:
더 안전하고 효율적인 솔루션은 토크나이저/파서를 사용하여 수학 표현식을 처리하는 것입니다. 다음은 간단한 정규식 기반 예입니다.
$ma = "2+10"; if (preg_match('/(\d+)(?:\s*)([\+\-\*\/])(?:\s*)(\d+)/', $ma, $matches) !== FALSE) { $operator = $matches[2]; switch ($operator) { case '+': $p = $matches[1] + $matches[3]; break; case '-': $p = $matches[1] - $matches[3]; break; case '*': $p = $matches[1] * $matches[3]; break; case '/': $p = $matches[1] / $matches[3]; break; } echo $p; }
위 내용은 PHP의 문자열에서 수학 표현식을 안전하게 평가하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!