dedlfix: Variablen absichern per mysqli_real_escape_string: Reicht das aus?

Beitrag lesen

Tach!

Sofern das ein normales input oder eine textarea ist, kommen die Daten also einem Reintext-Kontext in den SQL-Kontext.

Ja, wenn man UTF-8 als Zeichenkodierung (korrekt) verwendet. Oder wenn man ISO-8859-1 verwendet und die Nutzer keine Zeichen außerhalb davon eingeben.

<!DOCTYPE html>
<html>
<head>
    <title>Test</title>
    <meta charset="UTF-8">
</head>
<body>
    <form accept-charset="ISO-8859-1" action="">
        <button type="submit" name="test" value="😀 & 😒">Send ISO</button>
    </form>

    <form action="">
        <button type="submit" name="test" value="😀 & 😒">Send</button>
    </form>
<?php
echo $_REQUEST['test'] . ' - ' . urlencode($_REQUEST['test']);

Das erste Formular sendet die Smileys als NCR und das & unmaskiert dazwischen, das zweite als UTF-8-kodierte Zeichen. Alternativ kann man die Seite auch als ISO-8859-1 und das Form ohne accept-charset ausliefern lassen und die Zeichen über ein Input-Feld eingeben, um das gleiche Problem zu haben.

Fazit: UTF-8 verwenden. Und wenn man solche Smileys auch in MySQL/MariaDB speichern möchte, muss man utf8mb4 und nicht nur utf8 verwenden.

dedlfix.