Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann man mathematische Ausdrücke aus Strings in PHP sicher auswerten?

Wie kann man mathematische Ausdrücke aus Strings in PHP sicher auswerten?

Mary-Kate Olsen
Freigeben: 2024-12-27 22:44:17
Original
710 Leute haben es durchsucht

How to Safely Evaluate Mathematical Expressions from Strings in PHP?

Auswerten mathematischer Ausdrücke aus Zeichenfolgen mithilfe von Eval

Problem:

Beim Versuch, a auszuwerten Wenn ein mathematischer Ausdruck mithilfe von eval() in einer Zeichenfolge gespeichert wird, tritt ein „Parse-Fehler“ auf, der auf ein unerwartetes Ende von hinweist Eingabe.

Lösung:

Obwohl es aus Sicherheitsgründen im Allgemeinen nicht empfohlen wird, eval() für diesen Zweck zu verwenden, wird das Problem durch die folgende Codeänderung behoben:

$ma = "2+10";
$p = eval('return ' . $ma . ';');
print $p;
Nach dem Login kopieren

Durch die explizite Rückgabe des Ergebnisses innerhalb einer eval()-Funktion erwartet der Code eine vollständige Zeile von Code.

Alternative Lösung:

Eine sicherere und effizientere Lösung ist die Verwendung eines Tokenizers/Parsers zur Verarbeitung mathematischer Ausdrücke. Hier ist ein einfaches Regex-basiertes Beispiel:

$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;
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann man mathematische Ausdrücke aus Strings in PHP sicher auswerten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage