Zum Inhalt springen

UTF-8 und Latin1 Mischmach in der DB bereinigen

Erstellt am 4. August 2015 · Noch keine Antworten

Tags: Datenbank, Tipp

jojo31 ·

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:

<?php 
header('Content-Type: text/html; charset=UTF-8');

// DB Verbindung
   $user = 'root';
   $pass = '';
   $dbName = 'typo3_utf8_test';
   $host = 'localhost';

   $Verbindung = mysqli_init();
   // mysqli_options($Verbindung,MYSQLI_OPT_LOCAL_INFILE);
   mysqli_real_connect($Verbindung,$host, $user, $pass,$dbName) 
                  or die ('<P>Unable to connect</P>');
	
   $Verbindung->set_charset("utf8");
   

if(!function_exists('mysqli_result'))
{
	function mysqli_result($res, $row, $field=0) 
	{ 
		if($res)
		{
			$res->data_seek($row); 
			$datarow = $res->fetch_array(); 
			return $datarow[$field]; 
		}
		else
		{
			return $t='';	
		}
		
	} 

}

		
// Felder die zu korrigieren sind
$var[0] = 'bodytext';
$var[1] = 'header';
$var[2] = 'subheader';
$var[3] = 'titletext';
$var[4] = 'imagecaption';

$SQL_eintraege = "SELECT * FROM tt_content ORDER BY uid";
$Ergebnis_eintraege = mysqli_query($Verbindung,$SQL_eintraege);

foreach($var as $feld)
{
	$i = 0;
	while($uid = @mysqli_result($Ergebnis_eintraege,$i,'uid'))
	{
			$strum_a = htmlentities(@mysqli_result($Ergebnis_eintraege,$i,$feld));
			$strum = html_entity_decode($strum_a);
			
			$SQL_UPD = "UPDATE tt_content SET ".$feld." = '".$strum."' WHERE uid = '".$uid."';";
			$Ergebnis_UPD = mysqli_query($Verbindung,$SQL_UPD);
			
		$i++;
	}
	echo "<br /><br />".$feld." => Fertig!<br /><br />";
}
?>

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. 🙂