ich habe hier eine Umkreissuche auf einer Seite, die folgende Merkmale hat:
1 Inputfeld, dass Ortsnamen ODER PLZ Angaben akzeptiert (s. Code)
GeoDB: DB, alle Tables haben die Collation utf8_unicode_ci
Umlaute in sämtlichen Tabellen alle o.k. (bzw. zip_coordinates => zc_location_name => Köln (s.u.))
HTML Formular (accept-charset=utf-8) sendet/empfängt den Wert der Variable rs per GET
Debugging: Printe ich den Wert der Variable (nach Submit) komme ich im Frontend + Quelltextausgabe jeweils Köln angezeigt. Also alles gut, nichts zerschossen.
Alles funktioniert auch bestens, nur wenn ich einen Ortsnamen mit Umlauten angebe (bspw. eben Köln), findet er mir nichts in der GeoDB.
Hat irgendjemand vielleicht eine Idee, was ich noch probieren könnte, bzw. wo der Fehler liegen könnte? Im Grunde ist meine ganze Kette ja UTF-8 codiert.
Vielen Dank schon jetzt, viele Grüße
Olaf
Ich poste einfach mal den relevanten Code f. die Umkreissuche mit. Obschon ich denke dass heran nichts drehen muss (es funktioniert ja genau so wie es soll). Bis auf die Suche nach Orten mit Umlauten...
// Variable `$rs` ist die GET Variable, die aus dem Formsubmit kommt// PLZ suggested...if(is_numeric($rs)){$stmt=$dbh->prepare(" SELECT * FROM zip_coordinates WHERE zc_zip LIKE ? ");}else{// String, e.g. City suggested...$stmt=$dbh->prepare(" SELECT * FROM zip_coordinates WHERE zc_location_name LIKE ? ");}$stmtRadius=$dbh->prepare(" SELECT dest.zc_zip, dest.zc_location_name, ACOS( SIN(RADIANS(src.zc_lat)) * SIN(RADIANS(dest.zc_lat)) + COS(RADIANS(src.zc_lat)) * COS(RADIANS(dest.zc_lat)) * COS(RADIANS(src.zc_lon) - RADIANS(dest.zc_lon)) ) * 6380 AS distance FROM zip_coordinates dest CROSS JOIN zip_coordinates src WHERE src.zc_id = :zcid HAVING distance < :distance ORDER BY distance; ");$stmt->execute(array("$rs%"));$rows=$stmt->fetchAll();foreach($rowsas$row){$stmtRadius->execute(array(":zcid"=>$row['zc_id'],':distance'=>$distance));$res=$stmtRadius->fetchAll();foreach($resas$r){$sl_rs_results[]=$r['zc_zip'];}}// ... Query die CMS DB mit `$sl_rs_result[]` nach Datensätzen...
Last edit: Olaf Gleba 2021-04-29
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Moin,
ich habe hier eine Umkreissuche auf einer Seite, die folgende Merkmale hat:
rs
per GETAlles funktioniert auch bestens, nur wenn ich einen Ortsnamen mit Umlauten angebe (bspw. eben Köln), findet er mir nichts in der GeoDB.
Hat irgendjemand vielleicht eine Idee, was ich noch probieren könnte, bzw. wo der Fehler liegen könnte? Im Grunde ist meine ganze Kette ja UTF-8 codiert.
Vielen Dank schon jetzt, viele Grüße
Olaf
Ich poste einfach mal den relevanten Code f. die Umkreissuche mit. Obschon ich denke dass heran nichts drehen muss (es funktioniert ja genau so wie es soll). Bis auf die Suche nach Orten mit Umlauten...
Last edit: Olaf Gleba 2021-04-29
Wie das so ist, kaum war der Post raus, habe ich die Lösung gefunden ;-). Vielleicht hilfts jemand bei einem vergleichbaren Problem.
Ich hatte dem PDO connect zur GeoDB einfach den noch keinen expliziten charset mitgegeben: