Umlaute, PHP 5.x und UTF8 (Version A-O)

Eingetragen von Rock@wulf am Do, 18. Apr 2013 - 13:29


Umlaute, PHP 5.x und UTF8
Nachdem auch dieses Thema ständig besprochen wird auch hier mal eine FAQ dazu.
Wie wir alle wissen sind wir in Deutschland daran gewöhnt sogenannte Umlaute zu verwenden.
Viele andere Sprachen kennen diese aber nicht und haben auch Probleme damit sie zu Interpretieren. HTML hatte dafür extra
ä
usw. bereitgestellt.
Selbiges kann man sich nun für Kyrillisch und Japanisch vorstellen auch da gibt es spezielle Zeichen Kodierungen.
Da hierdurch viele verschiedene Kodierungen entstanden sind, die auch alle verschieden viel Speicherplatz benötigen ist es nicht einfach alles unter einen Hut zu bringen.
z.B. Nutzt ilch latin1 als Kodierung. Nehmen wir jetzt einen neuen PHP 5.4 Server geht er aber von UTF8 aus und Bums schon knallt es. Kann man sich vorstellen wie unterhält sich ein Inder mit einem Araber beide verstehen Bahnhof.
Aber da ist es schon wieder UTF8 was ist das eigentlich. Nun nachdem man alle System mit Zig Kodierungen ausgestattet und auch zig verschiedene Kodierungen Warten und Pflegen musste kam der Ruf nach EINEM einheitlichem ZEICHENSATZ für ALLE.
Hier findet man dazu einen Interessanten Artikel:
www.heise.de/ct/Redaktion/heb/zeichensaetze.html
Zurück zum Thema
Jetzt haben wir festgestellt das PHP5.4 UTF 8 spricht, warum werden sich nun viele Fragen. Nun es ist beschlossen worden, das die Standard Kodierung für Webapplikationen UTF-8 wird. Neue Applikationen bauen bereits auf diese Technik. Ilch wird auch mit Version 1.2 vollends mit UTF-8 Kodieren und eigentlich sollte die Version bereits fertig sein. Wie wir alle wissen hat das mit dem Zeitplan nicht ganz so geklappt wie es sollte und Mairu arbeitet derzeit mit Hochdruck an der Fertigstellung des Update P für die Version 1.1. Diese ist soweit auch einsatzbereit allerdings werden immer noch Tests durchgeführt. Wer sich selbst ein Bild machen möchte:
github.com/IlchCMS/Ilch-1.1
hier findet man den Code.
Da wir wissen, dass viele von euch modifizierte Versionen Nutzen versuche ich euch jetzt einen Workaround zu bieten, mit dem ihr euer Script UTF8 fähig macht, bzw. sicherstellt das auch auf einem PHP 5.4 Server mit LATIN 1 kodiert wird.
Wer die reinen Code Änderungen Sehen will sollte bei Github
github.com/IlchCMS/Ilch-1.1/commit/624eecc852c9a063ebe4c3482c41933d406c3a1c#diff-25
durchblättern da findet man sie schneller und man spart sich mein Gerede. Außerdem werden da alle Themen vom Update P behandelt und nicht nur wie hier die Umlaute Fehler
So da wir faul sind fangen wir in der index.php an
Und fügen da unter
 define ( 'main' , TRUE );

Das ein:
 define('ILCH_TIMEZONE', 'Europe/Berlin'); // http://php.net/manual/en/timezones.php 
define('ILCH_CHARSET', 'ISO-8859-1'); 
define('ILCH_DB_CHARSET', 'latin1'); 
define('ILCH_ENTITIES_FLAGS', defined('ENT_HTML401') ? ENT_COMPAT | ENT_HTML401 : ENT_COMPAT);


Das Gleiche tun wir in der admin.php.
Anschließend öffnen wir die
if ( !$db ) { 
     die ('Kann Datenbank "'.DBDATE.'" nicht benutzen : ' . mysql_error(CONN)); 
   } 
  if (function_exists('mysql_set_charset') and version_compare(mysql_get_server_info(CONN), '5.0.7') !== -1) { 
    mysql_set_charset(ILCH_DB_CHARSET, CONN); 
  } 
  if (function_exists('date_default_timezone_get')) { 
    mysql_query('SET time_zone = "' . date_default_timezone_get() . '"'); 
  } 
 } 
  
 function db_close () {

Nun werden die folgenden Dateien geöffnet:
include/includes/func/bbcode.php
Suchen Z23: $s = htmlentities($s);
Ersetzen: $s = htmlentities($s, ILCH_ENTITIES_FLAGS, ILCH_CHARSET);

include/includes/func/escape.php
Suchen Z56: $t = htmlentities($t);
Ersetzen: $t = htmlentities($t, ILCH_ENTITIES_FLAGS, ILCH_CHARSET);

include/includes/func/allg.php
Suchen Z282:return(htmlentities(substr(strtr($text, $trans_tbl), $start, $length)));
Ersetzen: return(htmlentities(substr(strtr($text, $trans_tbl), $start, $length), ILCH_ENTITIES_FLAGS, ILCH_CHARSET));

include/includes/class/design.php
Suchen Z23: header('Content-Type: text/html;charset=ISO-8859-1');
Ersetzen: header('Content-Type: text/html;charset=' . ILCH_CHARSET);

Suchen Z249: $retur .= $tpl->list_get($datei, array (htmlentities($boxname), $menuzw . $menuzwE));
Ersetzen: $retur .= $tpl->list_get($datei, array (htmlentities($boxname, ILCH_ENTITIES_FLAGS, ILCH_CHARSET), $menuzw . $menuzwE));

SuchenZ292: $retur .= $tpl->list_get($datei, array (htmlentities($boxname), $menuzw . $menuzwE));
Ersetzen: $retur .= $tpl->list_get($datei, array (htmlentities($boxname, ILCH_ENTITIES_FLAGS, ILCH_CHARSET), $menuzw . $menuzwE));

include/contents/search.php
Suchen Z71-73: $title = $allgAr['title'].' :: Suchen :: '.htmlentities($snac);
$hmenu = '<a class="smalfont" href="index.php?search">Suchen</a><b> &raquo; </b>'.htmlentities($snac);
Ersetzen: $snacEnt = htmlentities($snac, ILCH_ENTITIES_FLAGS, ILCH_CHARSET);
$title = $allgAr['title'].' :: Suchen :: ' . $snacEnt;
$hmenu = '<a class="smalfont" href="index.php?search">Suchen</a><b> &raquo; </b>' . $snacEnt;

include/contents/gallery.php
Suchen Z62: $tpl->set('endung',htmlentities($menu->get(3)));
Ersetzen: $tpl->set('endung', htmlspecialchars($menu->get(3), ILCH_ENTITIES_FLAGS, ILCH_CHARSET));

include/admin/gbook.php
Suchen Z51: $text = substr(preg_replace("/\015\012|\015|\012/", " ", htmlentities(strip_tags(stripslashes($r['txt'])))),0,75);
Ersetzen: $text = substr(preg_replace("/\015\012|\015|\012/", " ", htmlentities(strip_tags(stripslashes($r['txt'])), ILCH_ENTITIES_FLAGS, ILCH_CHARSET)),0,75);

Ab jetzt sollten keine Problem mehr mit den Umlauten Existieren.
Bitte unbedingt nach Release von Version P auf diese Updaten.
Dies ist ein Temporäres Workaround