PHP UTF-8 cheatsheet

Jeder kennt´s und hat mit Sicherheit mindestens einmal damit zu Kämpfen gehabt (und kämpft immer noch damit). Es ist sehr ärgerlich und mittlerweile dennoch zu einer wichtigen Sache geworden, wenn´s darum geht, die eigene Webseite in verschiedenen Sprachen anzubieten. Die Rede ist von der Zeichenkodierung UTF-8.

Auf dem Blog von Nick Nettleton, der leider nicht mehr so aktuell ist, werden die wichtigsten Schritte beschrieben, worauf man bei der richtigen Verwendung der Zeichenkodierung UTF-8 achten sollte.

Der Datenbank UTF-8 beibringen

CREATE DATABASE db_name
	CHARACTER SET utf8
	DEFAULT CHARACTER SET utf8
	COLLATE utf8_general_ci
	DEFAULT COLLATE utf8_general_ci
	;

ALTER DATABASE db_name
	CHARACTER SET utf8
	DEFAULT CHARACTER SET utf8
	COLLATE utf8_general_ci
	DEFAULT COLLATE utf8_general_ci
	;

ALTER TABLE tbl_name
	DEFAULT CHARACTER SET utf8
	COLLATE utf8_general_ci
	;

SET NAMES utf8;

Installation der mbstring Erweiterung für PHP

yum install php-mbstring

bzw.

extension=php_mbstring.dll;

mbstring konfigurieren

mbstring.language		= Neutral	; Set default language to Neutral(UTF-8) (default)
mbstring.internal_encoding	= UTF-8		; Set default internal encoding to UTF-8
mbstring.encoding_translation	= On		; HTTP input encoding translation is enabled
mbstring.http_input		= auto		; Set HTTP input character set dectection to auto
mbstring.http_output		= UTF-8		; Set HTTP output encoding to UTF-8
mbstring.detect_order		= auto		; Set default character encoding detection order to auto
mbstring.substitute_character	= none		; Do not print invalid characters
default_charset		= UTF-8		; Default character set for auto content type header

Verwende alle dir zur Verfügung stehenden mbstring Funktionen

mail()                          -> mb_send_mail()
strlen()                        -> mb_strlen()
etc.

HTML entities entfernen

function html_encode($var)
{
    return htmlentities($var, ENT_QUOTES, 'UTF-8') ;
}

Content-type festlegen

<?php header('Content-type: text/html; charset=UTF-8'); ?>
<meta http-equiv="Content-type" value="text/html; charset=UTF-8" />

E-Mail-Nachrichten sowie Anhänge konvertieren

Content-type, Daten bei Multipart-Mails sowie Betreff und Nachrichteninhalt und alle möglichen Header wie beispielsweise den MIME-Header richtig stellen.

Hier geht`s weiter zum ausführlicheren Artikel