Ajax, PHP und die Umlaute

ConSoleM

Grünschnabel
Hallo.
Also ich habe ein Formularfeld in das der Nutzer eine Adresse eingeben kann und bei jeder Eingabe eines Buchstabens wird eine Datenbank über php abgefragt, ob eine Übereinstimmung mit den Daten vorhanden ist und diese wird dann als Button ausgegeben (um weitere Funktionalitäten aufzurufen). Das funktioniert auch soweit, nur bei Umlauten bricht das ganze mehr oder weniger ab und ich kann nach einem Umlaut schreiben was ich will, die Ergebnisse werden dadurch nicht mehr beeinflusst.
Es liegt nicht an der Seitencodierung (UTF-8), da ich das schon 100mal durchprobiert hab.

Hier mal der Quelltext zur Suchabfrage:
...
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
function init() {
Event.observe("SearchInput", "keyup", search);
}

function search(){
var address = "SearchInput="+ escape($F("SearchInput")); //$F geliefert von Prototype, escape dient der Formatierung (escape($F("SearchInput")))
new Ajax.Updater("Liste","suche3.php", {method:"get", parameters: address});
}

Event.observe(window,"load", init);

</script>
<style type="text/css">
...
</style>
</head>

<body>
<h1>Adressen-Suche</h1>
<fieldset>
<legend>Suchanfrage</legend>
<div id="form">
<form method="get" action="#" accept-charset="iso-8859-1, UTF-8">
<label for "SearchInput">Anfrage: </label>
<input type="text" id="SearchInput" name="SearchInput" />
</form>
</div>
<div id="Liste"><p>Bitte tippen Sie eine Adresse ein!</p>
</div>
</fieldset>
...

und der Quelltext zur Ausgabe:
<?php
$get = htmlentities($_GET["SearchInput"]);
if(empty($get)){
exit;
}

// mysql blabla
define('MYSQL_HOST', '...');
define('MYSQL_USER', '...');
define('MYSQL_PASS', '...');
define('MYSQL_DATABASE', 'Muellabfuhr');

// mysql conntecten
$connect = mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Es konnte keine Verbindung zur Datenbank aufgebaut werden:".mysql_error());
mysql_select_db(MYSQL_DATABASE) OR die("Es konnte keine Datenbank ausgeweahlt werden:".mysql_error());

$sql = "SELECT * FROM MH_Adressen GROUP BY strasse";
$result = mysql_query($sql, $connect);
echo "<ul>";
while($row = mysql_fetch_object($result)){
$pattern = "/^".$get."/i";
if(preg_match($pattern, $row->strasse) || preg_match($pattern, $row->ort) || preg_match($pattern, $row->ortsteil)){ //wenn Formulareingabe übereinstimmt, dann...
echo $strasse;
echo "
<li>
<form method='get' action='kalendererstellen.php'>
<input type='hidden' value='".$row->strasse."' name='strasse'></input>
<input type='hidden' value='".$row->ortsteil."' name='ortsteil'></input>
<input type='hidden' value='".$row->ort."' name='ort'></input>
<input type='submit' value='".$row->strasse.", ";
if($row->ort == $row->ortsteil || $row->ortsteil =="")
{
echo $row->ort;
}
else {
echo $row->ort." (OT ".$row->ortsteil.")";
}
echo "'></input>
</form></li>";

} //if zu
} //while zu
echo "</ul>";


?>

Also noch mal kurz: in meiner Abfrage werden Umlaute ignoriert.

Woran liegt das? Hat jemand nen Lösungsansatz?
 
Ich hatte einmal ein ganz ähnliches Problem. Der Grunddafür war, das jedesmal wenn ich einen Umalut übertragen hab, meldete der Server einen Error 500: Internal Server Error. Ruf mal auf deiner website das script mit dem parameter (inkl. umlaute) direkt auf und schau ob fehler auftreten. Vielleicht liegt es ja auch bei dir daran.
 
Wie stehen denn die Sachen in der DB?

Warum ich frage?
Angenommen, in der DB steht "Köln".

Du wandelst aber den GET-Parameter per htmlentities() um, wenn jemand "Köln" eingegeben hat, wird daraus "K&ouml;ln"...wodurch in der DB natürlich nix gefunden werden kann.
 
Danke für eure Antworten...
Ich habs grad hinbekommen. Hab im Javascript die escape-Funktion rausgenommen und dann den $get-Paramenter mit htmlspecialchars und htmlentities umgewandelt... jetzt gehts...

Code:
$get = htmlspecialchars($_GET["SearchInput"]);
if(empty($get)){
	exit;
}

$array_1 = array('ä', 'ü', 'ö','ß');
$array_2 = array('ä', 'ü', 'ö','ß');

for($x = 0; $x < 4; $x++){
  $get = str_replace($array_1[$x], $array_2[$x], $get);
}

echo htmlentities($get);
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück