HowTo convert from iso-xxx to utf-8?
| Autor | Nachricht |
|---|---|
|
Verfasst am: 04. 10. 2007 [19:55]
|
|
|
InforMedic
Themenersteller
Dabei seit: 13.05.2007
Beiträge: 339
|
Hallo community! Ich habe mich die letzten 2 Tage ein wenig mit charsets auseinander gesetzt und möchte euch meine Erkentnisse mitteilen. Um erfolgreich eine bestehende T3 Installation auf utf-8 zu konvertieren sind folgende Schritte notwendig:
Typo3 anpassen folgendes muss in typo3 erledigt werden: TYPOSCRIPT page.config.doctype = xhtml_trans page.config.xmlprologue = none page.config.xhtml_cleaning = all page.config.metaCharset = utf-8 page.config.additionalHeaders = Content-Type:text/html;charset=utf-8 typo3 backend/install tool: [SYS][setDBinit] = SET NAMES utf8; SET CHARACTER SET utf8; [SYS][UTF8filesystem] = 1 [BE][forceCharset] = utf-8 t3-extension convert2utf Mit dieser Extension alle angelegten Seiten nach UTF konvertieren (ist glaub ich für die verwendung von CoolUri interessant, so dass die generierten html-files utf-8 encoded sind) PHP/MySQL anpassen In der php.ini unter der Section "mbstring" habe ich folgende Angaben gemacht: HTML mbstring.internal_encoding = UTF-8 default_charset = "UTF-8" ; http input encoding. mbstring.http_input = UTF-8 ; http output encoding. mb_output_handler must be ; registered as output buffer to function mbstring.http_output = UTF-8 In der "my.cnf" des mysql servers habe ich HTML character-set-server = utf8 collation-server = utf8_unicode_ci skip-character-set-client-handshake angegeben. DB anpassen ACHTUNG: Hier hatte ich mist gebaut Es gibt ein typo3 angepasstes script, mit welchem man sich die komplette mysql-db + inhalt konvertieren lassen kann. Dieses funktioniert nicht -> wenn man zuvor mit phpmyadmin die DB-Kollation gnadenlos auf utf8 umgestellt hat. Also, nichts via phpmyadmin machen sondern nur über das script, dann werden die umlaute auch entsprechend konvertiert. Gemeint ist folgendes Script: /* * Original-Script von Dennis Blöte * http://blog.dopefreshtight.de/artikel/von-iso-8859-1-zu-utf-8-in-php-und-mysql/ * http://dennisbloete.de/stuff/db_convert.zip * * Angepasst an die Datenbank von TYPO3 4.0.2 von Stefan Macke * http://blog.stefan-macke.de/2006/11/28/konvertieren-einer-typo3-installation-nach-utf-8/ * http://blog.stefan-macke.de/wp-content/uploads/2006/11/db_convert_typo3.zip */ Sämtliche Infos habe ich von diesen beiden Herren entnommen. Hoffe dass dies für jemanden noch neu und von nutzen ist!! Grüße Info [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 04.10.2007 um 19:57.] |
|
Verfasst am: 24. 11. 2007 [12:29]
|
|
|
brikenv
Dabei seit: 18.03.2007
Beiträge: 11
|
Hallo InforMedic, vielen vielen Dank für Dein ausführliches HowTo! Ist die erste funktionierende Anleitung die ich bis jetzt im Netz gefunden habe um ein vorhandes Typo3-System nach UTF8 zu kovertieren. Ich habe mein System für den Test gespiegelt und in dem Testsystem die beschriebenen Schritte mit Aussnahme von der Konfiguration von MySql durchgeführt und es hat wunderbar geklappt. Ich musst elediglich noch einige Strings im Typoscript anpassen. Bevor ich dies nun im eigentlichen Live-System wiederhole habe ich noch eine Verständnisfrage. Wozu sind denn die Anpassungen in der PHP/ MySQL Konfiguration? Wäre super, wenn Du die einzelnen Schritte noch kommentieren könntest. Sind diese absolut notwendig? Vielen Dank erstmal! Super! Gruß brikenv |
|
Verfasst am: 11. 12. 2007 [21:22]
|
|
|
gstyleds
Dabei seit: 19.01.2006
Beiträge: 32
|
InforMedic schrieb: Hoffe dass dies für jemanden noch neu und von nutzen ist!! Hi, ja, ist es! Klasse, vielen Dank, klappt 1a. Noch als ergänzenden Tipp an die Community: Schaut euch erst eure DB an und tragt in der db_convert.php ab Zeile 76 die Tabellen eurer Extensions nach, z.B. die tt_news: PHP $tables = array(
array('be_groups'),
array('be_users'),
array('fe_groups'),
...
array('tt_news')Grüße, Dirk |
|
Verfasst am: 09. 01. 2008 [16:42]
|
|
|
norderik
Dabei seit: 09.01.2008
Beiträge: 2
|
ein Hinweis noch zum db_convert: ca. Zeile 120 steht PHP if(strpos($column['Type'], "char"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" /> != false || strpos($column['Type'], "text"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" /> != false) und das funktioniert nicht, da strpos($column['Type'], "text" Der Fehler führt dazu, dass "text"-Felder nicht konvertiert werden und fällt bei der Konvertierung nicht so schnell auf, weil z.B. der bodytext in tt_content den Typ "mediumtext" hat. Schneller Workaround: künstlichen Offset durch ein vorangestelltes Leerzeichen setzen: PHP if(strpos($column['Type'], "char"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" /> != false || strpos(" ".$column['Type'], "text"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" /> != false)Gruß Ernst |
|
Verfasst am: 12. 02. 2008 [12:04]
|
|
|
davidb
Dabei seit: 30.07.2006
Beiträge: 17
|
norderik schrieb: ein Hinweis noch zum db_convert: ca. Zeile 120 steht PHP if(strpos($column['Type'], "char"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" /> != false || strpos($column['Type'], "text"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" /> != false) und das funktioniert nicht, da strpos($column['Type'], "text" Der Fehler führt dazu, dass "text"-Felder nicht konvertiert werden und fällt bei der Konvertierung nicht so schnell auf, weil z.B. der bodytext in tt_content den Typ "mediumtext" hat. Schneller Workaround: künstlichen Offset durch ein vorangestelltes Leerzeichen setzen: PHP if(strpos($column['Type'], "char"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" /> != false || strpos(" ".$column['Type'], "text"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" /> != false)Gruß Ernst Auch wenn ich den Tip nicht getestet habe, erscheint er mir etwas fragwürdig. Generell ist der Hinweis nicht falsch, daß die Syntax falsche Ergebnisse liefern kann, PHP bietet hier jedoch eigene Mittel. Damit müsste es so notiert werden: PHP if(strpos($column['Type'], "char"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" /> !== false || strpos($column['Type'], "text"<img src="typo3conf/ext/mm_forum//res/smilies/icon_wink.gif" alt="icon_wink.gif" /> !== false) Die Notation "!==" bzw. "===" prüft nicht nur auf (Un)Gleichheit sondern auch auf den richtigen Typ, da der Typ boolean ist, liefert auch 0 das gewünschte Ergebnis. Gruß David |
|
Verfasst am: 12. 02. 2008 [12:23]
|
|
|
davidb
Dabei seit: 30.07.2006
Beiträge: 17
|
Das 2. Skript (von Stephan Macke) weist einen redundaten Abschnitt auf, und zwar kann man die Abfrage PHP if ($numrows > 2000)
{PHP } else { ... }Nachtrag: Beide Tips getestet, Ergebnis OK - danke für den Thread! Gruß David [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 12.02.2008 um 13:48.] |
|
Verfasst am: 04. 03. 2008 [14:24]
|
|
|
salomon_th
Dabei seit: 17.10.2006
Beiträge: 5
|
Das (erste und zweite) Skript scheint Probleme mit PHP 5.2 zu haben. Es hagelt Warnungen in der Form: PHP Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /[...]/class.sql_link.php on line 30 PHP Warning: Invalid argument supplied for foreach() in /[...]/db_convert.php on line 117 Er konvertiert zwar trotzdem recht viel, aber die Content-Datensätze werden durcheinander gewürfelt. Anstatt den eigentlichen Datensätzen zeigt er auf jeder Seite mehrfach einen ganz bestimmten Datensatz an. Kann das jemand mit PHP 5.2 bzw. TYPO3 4.2b3 bestätigen? Schönen Gruß Thomas |
|
Verfasst am: 05. 03. 2008 [23:15]
|
|
|
davidb
Dabei seit: 30.07.2006
Beiträge: 17
|
Ja, der Fehler liegt in der SQL-Anweisung, die durch TYPO3 übergeben werden soll. Diese Anweisung kann durch den Admin eingegeben werden, es ist also kein Fehler von TYPO3. Richtig muss der Wert in der localconf lauten: PHP $TYPO3_CONF_VARS[SYS][setDBinit] = "SET NAMES utf8; CHARACTER SET utf8"; verwendet man das Install-Tool gibt man dort unter [SYS][setDBinit] den Wert SET "NAMES utf8; CHARACTER SET utf8;" einfach in das Textfeld ein. Hier noch der entsprechende Link zur deutschen MySQL-Dokumentation: Festlegen von Zeichensätzen und Sortierfolgen [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 05.03.2008 um 23:18.] |
|
Verfasst am: 07. 03. 2008 [13:22]
|
|
|
salomon_th
Dabei seit: 17.10.2006
Beiträge: 5
|
Hi David. davidb schrieb: Richtig muss der Wert in der localconf lauten: PHP $TYPO3_CONF_VARS[SYS][setDBinit] = "SET NAMES utf8; CHARACTER SET utf8"; verwendet man das Install-Tool gibt man dort unter [SYS][setDBinit] den Wert SET "NAMES utf8; CHARACTER SET utf8;" einfach in das Textfeld ein. Das habe ich getan, laut Anleitung von oben. Habe inzwischen rausgefunden, dass es an Tabellen liegt, die keine uid-Spalte haben. Steht ja auch so im Skript *aschestreusel*. How ever ... bis auf die Templates scheint er alles zu korrekt zu konvertieren. Aber z. B. Umlaute oder Sonderzeichen in Constants/Setup-Feld eines TS-Datensatz (Tabelle sys_templates) stellt er bockig als '?' dar. Kann das jmd. nachvollziehen? Falls nicht, hab ich meine DB schon zu oft gedumpt und wieder eingespielt und müßte die Dinge von Hand korrigieren. Schönen Gruß, Thomas Nachtrag: Für das Problem mit dem einen CE, was nach der Konvertierung überall erscheint, gibt es nun auch eine Erklärung. In dem Datensatz wird eine Änderung in einer Extension beschrieben und es kommt auch PHP-Code vor. Der String PHP $wrappedSubpartArray['###LINK_ARCHIVE###'] [Dieser Beitrag wurde 1mal bearbeitet, zuletzt am 07.03.2008 um 14:17.] |




