04. 08. 2015, 10:38

Keine Ahnung, ob dazu jemand mal was geschrieben hat, aber hier mal meine Lösung als kleines PHP-Script.
Es kommt ja schon ab und zu mal vor, dass man ein uraltes Typo3, welches einen hübschen Mix von Latin1 und Utf8, sogar innerhalb von Contentelementen, upgraden muss und dann einen hübschen Salat vor sich hat.
Dann einfach mal die Tabelle tt_content schnappen und in eine Testdatenbank verfrachten, auf welche ihr dann folgendes Scriptchen los lasst:

  1. <?php
  2. header('Content-Type: text/html; charset=UTF-8');
  3.  
  4. // DB Verbindung
  5. $user = 'root';
  6. $pass = '';
  7. $dbName = 'typo3_utf8_test';
  8. $host = 'localhost';
  9.  
  10. $Verbindung = mysqli_init();
  11. // mysqli_options($Verbindung,MYSQLI_OPT_LOCAL_INFILE);
  12. mysqli_real_connect($Verbindung,$host, $user, $pass,$dbName)
  13. or die ('<P>Unable to connect</P>');
  14.  
  15. $Verbindung->set_charset("utf8");
  16.  
  17.  
  18. if(!function_exists('mysqli_result'))
  19. {
  20. function mysqli_result($res, $row, $field=0)
  21. {
  22. if($res)
  23. {
  24. $res->data_seek($row);
  25. $datarow = $res->fetch_array();
  26. return $datarow[$field];
  27. }
  28. else
  29. {
  30. return $t='';
  31. }
  32.  
  33. }
  34.  
  35. }
  36.  
  37.  
  38. // Felder die zu korrigieren sind
  39. $var[0] = 'bodytext';
  40. $var[1] = 'header';
  41. $var[2] = 'subheader';
  42. $var[3] = 'titletext';
  43. $var[4] = 'imagecaption';
  44.  
  45. $SQL_eintraege = "SELECT * FROM tt_content ORDER BY uid";
  46. $Ergebnis_eintraege = mysqli_query($Verbindung,$SQL_eintraege);
  47.  
  48. foreach($var as $feld)
  49. {
  50. $i = 0;
  51. while($uid = @mysqli_result($Ergebnis_eintraege,$i,'uid'))
  52. {
  53. $strum_a = htmlentities(@mysqli_result($Ergebnis_eintraege,$i,$feld));
  54. $strum = html_entity_decode($strum_a);
  55.  
  56. $SQL_UPD = "UPDATE tt_content SET ".$feld." = '".$strum."' WHERE uid = '".$uid."';";
  57. $Ergebnis_UPD = mysqli_query($Verbindung,$SQL_UPD);
  58.  
  59. $i++;
  60. }
  61. echo "<br /><br />".$feld." => Fertig!<br /><br />";
  62. }
  63. ?>

Im oberen Bereich nur noch eure Daten zur DB-Verbindung ändern!

Dann einfach alte Tabelle sichern und durch diese umgewandelte ersetzen.
Dann sollte alles schick in UTF8 kommen. :)