Zeichenumwandlung funktioniert nicht

heikomi

Erfahrenes Mitglied
Ich suche seit gestern hier ein Fehler und kann ihn nicht finden.
Ich verwende XAMPP 1.50
+ Apache 2.0.55
+ MySQL 5.0.15
+ PHP 5.0.5 + PHP 4.4.1 + PEAR

funktionen.php (auszug)
PHP:
<?PHP
function kleinezeichenkette($zeichenkette) {
  $kleineswort = strtolower($zeichenkette);
  $von = array('ä', 'ö', 'ü', 'ß', 'é','ó','ú','ã','í','à');
  $nach = array('ae','oe','ue','ss','e','o','u','a','i','a');
  for($x = 0; $x < 10; $x ++){
    $kleineswort = str_replace($von[$x], $nach[$x], $kleineswort);
  }
  return $kleineswort;
}
?>

PHP:
<?
include ("include/connect.php");
include ("include/funktionen.php");
$query = "select * from kontiverband";
$ergebnis = mysql_query($query) or die (mysql_error());
while ($row = mysql_fetch_array($ergebnis)) {
  $Feld03 = $row['Bezeichnung'];
  $Feld04 = kleinezeichenkette($Feld03);
  mysql_db_query($database, "INSERT INTO tmp_db01 SET  
  Bezeichnung = '$Feld03', Sorttext = '$Feld04' ") or die (mysql_error());
}
?>

$Feld04 ist zwar alles in Kleinbuchstaben, aber er wandelt keine Sonderzeichen um?

Gruss Heiko
 
Zuletzt bearbeitet:
Hallo Gumo,
ich benötige das für eine nach dem ABC sortierte Liste. Ich denke mal, das da z.b. Müller nicht wie Mueller sortiert wird.
 
PHP:
$x ++
Das könnte der Grund sein – das Leerzeichen muss da weg. Aber eine for-Schleife für einen Arraydurchlauf zu verwenden, ist ohnehin nicht so das wahre. So geht’s besser:
PHP:
$special_chars = array('ä'=>'ae', 'ö'=>'oe', 'ü'=>'ue', 'ß'=>'ss', 'é'=>'e', 'ú'=>'u', 'ã'=>'a', 'î'=>'i', 'à'=>'a');
foreach ($special_chars as $search => $replace) {
	$kleineswort = str_replace($search, $replace, $kleineswort);
}
/edit: Warum wird eigentlich neuerdings beim PHP-Code in der ersten Zeile am Anfang ein Leerzeichen eingefügt? Hat das irgendeinen tieferen Sinn? :confused:
 
PHP:
<?PHP
function kleinezeichenkette($zeichenkette) {
  $kleineswort = strtolower($zeichenkette);
  $special_chars = array('ä'=>'ae', 'ö'=>'oe', 'ü'=>'ue', 'ß'=>'ss', 'é'=>'e', 'ú'=>'u', 'ã'=>'a', 'î'=>'i', 'à'=>'a');
  foreach ($special_chars as $search => $replace) {
    $kleineswort = str_replace($search, $replace, $kleineswort);
  }
#  $array_1 = array('ä', 'ö', 'ü', 'ß', 'é','ó','ú','ã','í','à');
#  $array_2 = array('ae','oe','ue','ss','e','o','u','a','i','a');
#  $von = array('ä', 'ö', 'ü', 'ß', 'é','ó','ú','ã','í','à');
#  $nach = array('ae','oe','ue','ss','e','o','u','a','i','a');
#  for($x = 0; $x < 10; $x++){
#    $kleineswort = str_replace($von[$x], $nach[$x], $kleineswort);
#  }
  return $kleineswort;
}

Funktioniert auch nicht @ SilentWarrior.
Auch wenn ich $x++ nehme. In beiden Fällen ist wird die Zeichenkette zwar in Kleinbuchstaben umgewandelt aber nicht die Sonderzeichen.

Gruss Heiko
 
Folgendes funktioniert bei mir wunderbar:
PHP:
<?php
function kleinezeichenkette($zeichenkette) {
  $kleineswort = strtolower($zeichenkette);
  $special_chars = array('ä'=>'ae', 'ö'=>'oe', 'ü'=>'ue', 'ß'=>'ss', 'é'=>'e', 'ú'=>'u', 'ã'=>'a', 'î'=>'i', 'à'=>'a');
  foreach ($special_chars as $search => $replace) {
    $kleineswort = str_replace($search, $replace, $kleineswort);
  }
  return $kleineswort;
} 

$test = 'Funktioniert auch nicht @ SilentWarrior. Auch wenn ich $x++ nehme. In beiden Fällen ist wird die Zeichenkette zwar in Kleinbuchstaben umgewandelt aber nicht die Sonderzeichen.';

echo kleinezeichenkette($test);
?>
Das Problem muss also anderswo liegen (ich vermute ja, die Daten kommen schon nicht richtig aus der MySQL-Datenbank. Welche Codierung verwendest du da und welche hat die PHP-Datei?
 
@SilentWarrior
mit echo funktioniert es komischerweise auch bei mir.

Aber so nicht:

PHP:
$query = "select * from kontiverband"; 
$ergebnis = mysql_query($query) or die (mysql_error()); 
while ($row = mysql_fetch_array($ergebnis)) { 
  $Feld03 = $row['Bezeichnung']; 

  # Diese Zeile wandelt nur in Kleinbuchstaben um
  $Feld04 = kleinezeichenkette($Feld03); 

  # Dies würde es auch machen
  #$Feld04 = kleinezeichenkette($row['Bezeichnung']); 

  mysql_db_query($database, "INSERT INTO tmp_db01 SET   
  Bezeichnung = '$Feld03', Sorttext = '$Feld04' ") or die (mysql_error()); 
}
 
Problem behoben!
Es lag daran, das die Zeichen in der Funktion in htmlspecialchars gespeichert wurden (von HTML-Studio) und in der Datenbank diese im Klartext waren.

Gruss Heiko
 
Zurück