Umlaute an MySQL-Datenbank übergeben

flobaer

Grünschnabel
Hallo,

ich will über PHP eine CSV-Datei in eine Datenbank übernehmen, was auch wunderbar funktioniert. Nur werden leider die Umalute nicht richtig übernommen. Aus ä wird Š, aus Ä wird € usw. Die Umlaute vorher zu filtern und beispielsweise durch ae zu ersetzen wäre ja kein Problem, aber die Umlaute sollen in der Datenbank vorhanden sein. Alle Umlaute von Hand in der Datenbank zu ändern ist mir auch zu viel Arbeit.
Ich denke da gibt es eine ganz einfache Lösung. Ich habe sie nur noch nicht gefunden.

Danke für Eure schnelle Hilfe.
Florian
 
ICh würde Sagen, ersetze einfach die Sonderzeichen durch die ASCII-Coden.
Code:
<?php
// Ü maskieren
$text=str_replace("ü","& #252;",$text);
$text=str_replace("Ü","& #220;",$text);
// Ö maskieren
$text=str_replace("ö","& #246;",$text);
$text=str_replace("Ö","& #214;",$text);
// Ä maskieren
$text=str_replace("ä","& #228;",$text);
$text=str_replace("Ä","& #196;",$text);
// € maskieren
$text=str_replace("€","& #128;",$text);
?>

Ich hoffe, dass ich dir helfen konnte. Falls du noch Fragen hast, dann frag einfach!
Du musst jedoch zuerst die Leerzeichen wischen dem & und der # entfernen. Das musste ich machen, weil das sonst schon automatisch maskiert worden wäre.
 
Du kannst auch gleich alle HTML Entitäten umwandeln:
PHP:
<?php
  $trans = array();
  for($i=126; $i<=255; $i++) {
    $trans[chr($i)] = '&#'.$i.';';
  }
  $encoded = strtr($string, $trans);
?>
 
Hallo Maiki,

ich habe das mal in mein Skript übernommen. Die Sondezeichen werden auch richtig ersetzt. Allerdings wird die jeweilige Zeile nach dem Sonderzeichen abgeschnitten. Woran kann das liegen? Hier mal mein gesamter Code:
Code:
 <?php
 	include("config.php");
 	include("navi.php");
	$linkID = mysql_connect($ServerHost, $ServerUser, $ServerPass) or die ("Keine Verbindung zur Datenbank!");
	if (mysql_select_db($database, $linkID))
		echo("Datenbank Etatk&uuml;rzel ausgew&auml;hlt.<br>");
	else
	   die("Fehler!"); 
	$zeile = file("etatkuerzel.csv"); 
	for ($lo=0;$lo<sizeof($zeile);$lo++) 
	{ 
	$tmp = str_replace("\"","'",$zeile[$lo]);
	
	// Ü maskieren
	$tmp=str_replace("ü","& #252;",$tmp);
	$tmp=str_replace("Ü","& #220;",$tmp);
	// Ö maskieren
	$tmp=str_replace("ö","& #246;",$tmp);
	$tmp=str_replace("Ö","& #214;",$tmp);
	// Ä maskieren
	$tmp=str_replace("ä","& #228;",$tmp);
	$tmp=str_replace("Ä","& #196;",$tmp);
	// € maskieren
	$tmp=str_replace("€","& #128;",$tmp);
	 
	$row = explode(";",$tmp);
	echo $tmp;
	echo (".");
	$sql = "INSERT INTO etatklst (kuerzel,etat,stammhaus) values ('$row[1]','$row[2]','$row[3]')";
	$erg = mysql_query($sql,$linkID) or die ("Upload fehlgeschlagen! Grund: ".mysql_error()); 
	}
    include("fuss.php");
?>

Das Leerzeichen zwischen & und # habe ich natürlich entfernt.
 
Manchmal muss man erst eine Frage stellen, um dann doch selbst auf die Antwort zu kommen. Ich habe folgende Zeile vor der Sonderzeichenumwandlung eingefügt
$tmp = str_replace(";","|",$zeile[$lo]);
um die ; durch | zu ersetzen. Danach trenne ich die Zeilen nicht mehr über das ; sondern über |:
$row = explode("|",$tmp);
und schon funktioniert es.
 
Hm, zu früh gefreut. Die Daten werden zwar richtig angezeigt, aber wenn ich über phpMyAdmin in die Datenbank gehe, lautet ein Eintrag beispielsweise „AuswŠrtiges Amt”. Wenn ich eine Suchabfrage nach „auswärt” starte, wird der Eintrag natürlich nicht gefunden. Ich könnte wahrscheinlich die Umlaute in der Suchabfrage auch ersetzen, dann werden aber Einträge nicht gefunden, die ich über das Formular der Webseite eingebe, denn von dort aus wird ein ä auch als solches in die Datenbank geschrieben. Was nun?
Ich denke das Problem liegt an der eingelesen CSV-Datei, bzw. deren Codierung. Kann man darüber irgendwie zum Ziel kommen?
 
Zurück