Umlaute werden falsch über PHP in die MySQL-Datenbank gespeichert

Zudem brauchst bei UTF-8 du bis auf die HTML-Metazeichen keine anderen Zeichen durch Zeichenreferenzen zu ersetzen.
 
Habe nun ein weiteres Problem und zwar soll aus einem in ein Formular eingegebenen String automatisch ein String ohne Sodnerzeichen erstellt werden, bzw. soll die Sonderzeichen ersetzt werden. Da die Eingaben des Formulars aber nun via UTF-8 geschehen, funktioniert meine Funktion nicht mehr, die z.B. aus einem ü ein ue macht. Der Grund dafür ist jetzt, dass die Sonderzeichen schon in dem String in UTF-8 sind.

Gibt es eine PHP-Funktion mit der man Zeichen in UTF-8 umwandeln kann?
 
Bei UTF-8 musst du auch die UTF-8-Kodierungen der jeweiligen Zeichen nehmen. Das heißt entweder kodierst du auch die PHP-Skripte mit UTF-8 oder du gibst die Bitsequenzen einzeln an.
PHP:
$trans = array(
	"\xC3\xA4" => 'ae',
	"\xC3\xB6" => 'oe',
	"\xC3\xBC" => 'ue',
	// …
);
 
Habe nun mal versucht die Zeichen zu ersetzen, was aber leider nicht funktioniert.

PHP:
$text='Hier ist ein Text mit den Umlauten ä, ö und ü';
$zeichenliste=array(
"\xC3\xA4" => 'ae', 
"\xC3\xB6" => 'oe',
"\xC3\xBC" => 'ue');
$text=strtr($text,$zeichenliste);
echo $text;

Die Ausgabe sieht dann folgendermaßen aus:

Hier ist ein Text mit den Umlauten ä, ö und ü

Sie sollte aber ja so aussehen:

Hier ist ein Text mit den Umlauten ae, oe und ue

Was hab ich denn da jetzt wieder falsch gemacht?
 
Ich bekomme die Daten aus einem Formular das accept-charset="utf-8" hat. Also müssten diese doch UTF-8 kodiert sein oder?
 
Ja müssten sie. Probier doch mal Folgendes:
PHP:
<?php

	header('Content-Type: text/html; charset=utf-8');

	if( $_SERVER['REQUEST_METHOD'] == 'POST' ) {
		$zeichenliste = array(
			"\xC3\xA4" => 'ae',
			"\xC3\xB6" => 'oe',
			"\xC3\xBC" => 'ue'
		);
		echo htmlspecialchars(strtr($_POST['foobar'], $zeichenliste));
	}

?>
<form action="" method="post" accept-charset="utf-8">
	<input type="text" name="foobar">
	<input type="submit">
</form>
 
Zurück