PHP MySQL Sonderzeichen in DB speichern

Hallo zusammen,

ich habe ein Formular, das als Mini-CMS dient erstellt. Die Einträge werden in einer DB gespeichert und auf einer anderen Seite ausgegeben. Jetzt habe ich das Problem, dass Sonderzeichen wie z.B. ’ einen Fehler verursachen und der Eintrag des entsprechenden Feldes in der DB leer bleibt.

Hier die Verarbeitung:
[PHP]<?php
include ‚config.inc.php‘;
$msg = ‚‘; // variable for errors & success info

/* BEITRAG ÄNDERN */
if ( isset( $_POST[ ‚change‘ ] ) && is_numeric( $_POST[ ‚n_ID‘ ] ) ) {
$the_date = htmlspecialchars( $_POST[ ‚datum‘ ] );
$the_headline = htmlspecialchars( $_POST[ ‚kopfzeile‘ ] );
$the_text = htmlspecialchars( $_POST[ ‚text‘ ] );

if ( !$msg ) {
    $sql = 'UPDATE `news` SET
            datum = \'' . $the_date . '\',
            kopfzeile =  \'' . $the_headline . '\',
            text = \'' . $the_text . '\'
        WHERE
            n_ID = \'' . $_POST[ 'n_ID' ] . '\'';

    $run = $db->query( $sql );

    if ( $run ) {
        $msg .= '<strong>News wurden aktualisiert.</strong>';
    } else {
        $msg .= '<strong>Fehler beim Aktualisieren der News!</strong>';
    }

}

}

/* NEUER BEITRAG */
if ( isset( $_POST[ ‚new‘ ] ) ) {
$the_date = htmlspecialchars( $_POST[ ‚datum‘ ] );
$the_headline = htmlspecialchars( $_POST[ ‚kopfzeile‘ ] );
$the_text = htmlspecialchars( $_POST[ ‚text‘ ] );

$sql = 'INSERT INTO news SET
        datum = \'' . $the_date . '\',
        kopfzeile =  \'' . $the_headline . '\',
        text = \'' . $the_text . '\'';

if ( !$msg ) {
    $run = $db->query( $sql );

    if ( $run ) {
        $msg .= '<strong>Neue Mitteilung veröffentlicht.</strong>';
    } else {
        $msg .= '<strong>Fehler beim Veröffentlichen.</strong>';
    }
}

}

?>[/PHP]

Mein Ansatz war, das „htmlspecialschars“ durch „mysqli_real_escape_string“ oder dergleichen zu ersetzen, doch auch das schafft keine Abhilfe. Die Datenbank an sich ist UTF-8 codiert, die textfelder haben die Kollation „utf8_unicode_ci“ und sind vom Typ „text“ bzw. „varchar“ habe ich auch schon getestet.
Kenne mich leider noch nicht sehr mit PHP und MySQL aus und auch das durchforsten sämtlicher Foren und Manuals hat mich bisher nicht weiter gebracht. Ich hoffe jemand kann mir weiterhelfen, was ich korrigieren muss, damit Sonderzeichen korrekt in die Datenbank geschrieben werden (und dann wieder ausgegeben).

Vielen Dank für eure Hilfe!

curved

mysqli_real_escape_string ist richtig, htmlspecialschars wird bei der Ausgabe verwendet

Danke, das hatte ich ja versucht, aber ohne Erfolg. Allerdings habe ich es mir jetzt noch einmal angeschaut und festgestellt, dass ich lediglich „htmlspecialchars“ durch „mysqli_real_escape_string“ ersetzt hatte. Die korrekte Syntax ist allerdings „mysqli_real_escape_string(connection,escapestring);“. Die connection hatte ich vergessen.
Danke nochmals!