> 백엔드 개발 > PHP 튜토리얼 > PHP의 문자열에서 수학 표현식을 안전하게 평가하는 방법은 무엇입니까?

PHP의 문자열에서 수학 표현식을 안전하게 평가하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-27 22:44:17
원래의
702명이 탐색했습니다.

How to Safely Evaluate Mathematical Expressions from Strings in PHP?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿