PHP-Einfach.de PHP lernen leicht gemacht

Navigation
» Startseite
» Newsübersicht
» Kontakt
» Impressum

Community
» Forum
» Gästebuch

Tutorial
» PHP Tutorial
» MySQL Tutorial
» PHP
» MySQL
» Codeschnipsel

Downloads
» Einführung
» Scripts
» Command Board

Sonstiges
» md5-Generator
» Generator
» Wissenswertes

PHP lernen


Dieses Projekt wird unterstützt von
Lichteffekte Shop

 
Partner:
PHP Forum
Mathe Nachhilfe
Suchmaschinenoptimierung

Verwendung von UTF-8

Zurück zur Übersicht

Da hier im Forum bereits öfters die Frage nach UTF-8 kommt, werde ich versuchen euch einige Grundlagen, was den Umgang mit UTF-8 angeht, bei zu bringen.
1. Das Script
Das Script könnt ihr einfach weiter so benutzen wie bisher. Hier ist aber nun Entscheident, das ihr eine Funktion braucht, die euch klar Anzeigt, ob ein String UTF-8 kodiert ist, oder nicht. Folgende Funktion tut dies:
 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
<?php
function is_utf8($string) {
        
/*return preg_match('/^(
                [\x09\x0A\x0D\x20-\x7E]*        # ASCII
            |    [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte
            |    \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
            |    [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}    # straight 3-byte
            |    \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
            |    \xF0[\x90-\xBF][\x80-\xBF]{2}        # planes 1-3
            |    [\xF1-\xF3][\x80-\xBF]{3}        # planes 4-15
            |    \xF4[\x80-\x8F][\x80-\xBF]{2}        # plane 16
            )*$/x', $string);
        */    
        
return preg_match('/(
                [\xC2-\xDF][\x80-\xBF]            # non-overlong 2-byte
            |    \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
            |    [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}    # straight 3-byte
            |    \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
            |    \xF0[\x90-\xBF][\x80-\xBF]{2}        # planes 1-3
            |    [\xF1-\xF3][\x80-\xBF]{3}        # planes 4-15
            |    \xF4[\x80-\x8F][\x80-\xBF]{2}        # plane 16
            )/x'
$string);
    }
?>

Desweiteren ist der Umgang mit HTMLENTITES und HTMLSPECIALCHARS nicht mehr so einfach wie vorher. Hier zu könnt ihr die Funktion in folgenden Formen aufrufen:
 PHP 
1:
2:
3:
4:
<?php
htmlspecialchars
($stringENT_COMPAT'UTF-8');
htmlentities($stringENT_COMPAT'UTF-8');
?>

Auch greifen die Stringfunktionen von PHP nicht mehr fehlerfrei, da UTF-8 auf Unicode basiert, und somit ein Zeichen nicht nur ein Byte haben kann. Hierfür gibt es nun die MultiBytefunktionen aus der MB-Bibliothek. Desweiteren kommen Funktionen für UTF-8 kodierung und decodeierung hinzu. (utf8_decode & utf8_encode)
 PHP 
1:
2:
3:
4:
<?php
$newstring 
utf8_decode($string)
$newstring utf8_encode($string)
?>

Diese Greifen aber nur bei ISO-8859-1 und UTF-8 . Für andere kodierungen zu UTF-8 sollte man die Funktion mb_convert_encoding benutzen.
 PHP 
1:
2:
3:
<?php
$string 
mb_convert_encoding($string$to$from);
?>

Somit wäre das Script abgedeckt.
2. Die Homepage
Fehler entstehen meistens hier, wenn Daten übergeben werden. Diesen könnt ihr einfach vorbeugen wenn ihr:
 Code 
1:
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
Sowie bei der erste getätigten Ausgabe:
 PHP 
1:
2:
<?php
header
('Content-Type: text/html; charset=UTF-8');?>

sendet. Damit wären hier Fehler bereits ausgeschlossen.
3. Die Datenbank
Hier liegt auch oft ein Fehler. UTF-8 wird erst von einer mySQL-Version erst ab 4.1+ fehlerfrei unterstützt. Hier solltet ihr für Verbindung, und Tabellen meist folgende Kodierung fehlen:
utf8_unicode_ci oder utf8_bin. Zudem, wie gesagt, sollte die Verbindung von PHP zu mySQL und zurück auf UTF-8 zurückgreifen. Solltet ihr euch da nicht sicher sein, wirkt ein einfaches SQL-Query
 Code 
1:
SET NAMES 'utf-8'

So, das ist somit das wichtigste zu UTF-8 und dürfte euch weiter helfen.
Bei Fragen stehe ich soweit ich kann gerne zu verfügnung, möchte aber auch bitten, das ich nicht zu jeden Problem die Lösung weiß. Wenn hier die Tipps hier beachtet, dürfte es aber keine bis kaum Probleme geben.

Kommentare

Zurück zur Übersicht

Autor GameR

News
13.08 - » Spam im Gästebuch
Endlich Schluss mit dem Spam

08.12 - » Clanletter 2.0
Clanletter wurde komplett neu programmiert

01.09 - » Command Board 1.0 - 2.0
Das Command Board 1.0 Beta 2.0 ist erschienen


Mehr

Forum
» Entwickler Forum

» insert nach login

» Tabellenzelle zu groß







© PHP-Einfach.de 2003 - 2012