Zwischen klassische Lösungen PHP <-> MySQL und PHP<->MSSQL gibt es einige Unterschiede. Dazu gehört: die Datentransferierung in Unicode. Da unsere Daten mehsprachig sein können, ist das Thema Unicode besonders gut zu beachten. Folgende Besonderheiten sollen berücksichtigt werden:
- Die Columns (Spalten in der Tabelle), die für Unicode Inhalt gedacht sind müssen als nvarchar Type haben.
- Erstellung der Tabelle: $table - Tabellename, ID- automatische Zeilenzähler, tickertext und kategoriy haben NVARCHAR Type. $result = mssql_query("CREATE TABLE $table ( ID int IDENTITY(1,1) PRIMARY KEY, tickertext NVARCHAR( 200 ) NOT NULL , kategory NVARCHAR( 150 ) ) ") or die(mysql_error());
- Vor der Datenbankverbindung ini_set('mssql.charset', 'UTF-8');
- Im Form Tag <form METHOD="post" action="ticker-formmailer.php" ENCTYPE="multipart/form-data" name="ticker" accept-charset="utf-8">
- Datenübergabe: Es gibt zwei Lösungen dafür.
- $tabele = "DWNews_Ticker"; //Tabellename
$tickertext = $_POST['tickertext']; //Datenübergabe vom Formular mit POST Methode
$kategorie = $_POST['kategorie']; //Datenübergabe vom Formular mit POST Methode
$result = mssql_query("INSERT INTO DWNews_Ticker (tickertext, kategory) VALUES (N'$tickertext',N'$kategorie')");
Nachtei von der Übertragung, dass die Daten in einer verzehrter Codierung übertragen wurden. Dafür aber auf der Webseite, Benutzer-Oberfläche korrekt ausgelesen. - $tickertext = iconv('UTF-8', 'UTF-16LE', $_POST['tickertext']); //Konvertierung durch native encoding
$tickertext = bin2hex($tickertext); //Konvertierung durch hexadecimal
$tickertext = '0x'.$tickertext;
Gleiche für die zweite nvarchar:
$kategorie = iconv('UTF-8', 'UTF-16LE', $_POST['kategorie']); //convert into native encoding
$kategorie = bin2hex($kategorie); //convert into hexadecimal
$kategorie = '0x'.$kategorie;
Hier werden die Daten in die Datenbank gespeichert
$result = mssql_query("INSERT INTO DWNews_Ticker (tickertext, kategory) VALUES (CONVERT(nvarchar(2000), $tickertext), CONVERT(nvarchar(2000), $kategorie))");
Mit der Übertragung werden die Sätze aus dem Formular als Unicode in der Datenbank kopiert.
- $tabele = "DWNews_Ticker"; //Tabellename
Keine Kommentare:
Kommentar veröffentlichen