• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SQL Datenbank Abfrage

willibirgit

Neues Mitglied
Hallo,
wer kann helfen ?

ich hab ein Suchscript entworfen das eine sql-Datenbank durchsucht
und am Bildschirm die Ergebnisse ausgibt.
Problem: wenn ich einen Suchbegriff wie 'München' eingebe kommt
keine Anzeige: Wörter die ä,ö,ü enthalten weren nicht angezeigt ???
in der Datenbank sind die Wörter richtig eingetragen.
Woran kanns liegen ?
Danke
 
Werbung:
ohne code können wir nichts machen.
kann am zeichensatz liegen, normalerweise sollte jeder umlaut und jedes zeichen mit htmlspecialchars() maskiert werden. zusätzlich solltest du auf die (korrekte) ISO- bzw. UTF-kodierung achten

Nils aka XraYSoLo
 
sql auslesen

Scriptausschnitt:


// Zeitfenster setzen f?r startzeit
$querytime_before = get_time();

// Gesamt-Anzahl der Eintr?ge in der Table ermitteln
$table_size = get_table_size($link,$table);

// Eingabe an Tabellenformat anpassen ("&uuml_" für "?")
$converted = convert_spc_chr($phrase);
$converted = eregi_replace(" ","%",$converted); // Platzhalter für * einsetzen

// Zuerst die Spalte `link` abfragen, Treffer haben h?here Priorit?t
$query = "SELECT * from $table WHERE (`link` LIKE '%$converted%')" ;
$end = " LIMIT $start,$stop;";
$search = $query.$end;
if(!($erg = mysql_query($search,$link))){
print("<center><a style = \"color:black\">Feehler beim Zugriff auf die Datenbank</a></center>");
die;
 
Werbung:
mich würde mal interessieren, was in der convert_spc_chr() steht, das ist eine benutzerdefinierte funktion. zusätzlich die form der SQL-abfrage (variable, direktbefehl o. ä.) mal herzeigen.

der übersicht halber das nächste mal bitte in php-code-tags.

Nils aka XraYSoLo
 
Diese Datei ist in UTF-8 gespeichert ist das richtig ???


$conv_chars = array (
"OiexclO" => "?","OcentO" => "?","OpoundO" => "?",
"OcurrenO" => "?","OyenO" => "?","ObrvbarO" => "?",
"OsectO" => "?","OxumlO" => "?","OcopyO" => "?",
"OordfO" => "?","OlaquoO" => "?","OnotO" => "?",
"OregO" => "?","OmacrO" => "?","OdegO" => "?",
"OplusmnO" => "?","Osup2O" => "?","Osup3O" => "?",
"OacuteO" => "?","OmicroO" => "?","OparaO" => "?",
"OmiddotO" => "?","OcedilO" => "?","Osup1O" => "?",
"OordmO" => "?","OraquoO" => "?","Ofrac14O" => "?",
"Ofrac12O" => "?","Ofrac34O" => "?","OiquestO" => "?",
"OAgraveO" => "?","OAacuteO" => "?","OAcircO" => "?",
"OAtildeO" => "?","OAumlO" => "?","OAringO" => "?",
"OAEligO" => "?","OCcedilO" => "?","OEgraveO" => "?",
"OEacuteO" => "?","OEcircO" => "?","OEumlO" => "?",
"OIgraveO" => "?","OIacuteO" => "?","OIcircO" => "?",
"OIumlO" => "?","OETHO" => "?","ONtildeO" => "?",
"OOgraveO" => "?","OOacuteO" => "?","OOcircO" => "?",
"OOtildeO" => "?","OOumlO" => "?","OtimesO" => "?",
"OOslashO" => "?","OUgraveO" => "?","OUacuteO" => "?",
"OUcircO" => "?","OUumlO" => "?","OYacuteO" => "?",
"OTHORNO" => "?","OszligO" => "?","OagraveO" => "?",
"OaacuteO" => "?","OacircO" => "?","OatildeO" => "?",
"OaumlO" => "?","OaringO" => "?","OaeligO" => "?",
"OccedilO" => "?","OegraveO" => "?","OeacuteO" => "?",
"OecircO" => "?","OeumlO" => "?","OigraveO" => "?",
"OiacuteO" => "?","OicircO" => "?","OiumlO" => "?",
"OethO" => "?","OntildeO" => "?","OograveO" => "?",
"OoacuteO" => "?","OocircO" => "?","OotildeO" => "?",
"OoumlO" => "?","OdivideO" => "?","OoslashO" => "?",
"OugraveO" => "?","OuacuteO" => "?","OucircO" => "?",
"OuumlO" => "?","OyacuteO" => "?","OthornO" => "?",
"OyumlO" => "?"
);


function reconvert_spc_chr($text){
global $conv_chars;
foreach($conv_chars as $html => $converted) $text = ereg_replace($html,$converted,$text);
return($text);
}
function convert_spc_chr($text){
global $conv_chars;
foreach($conv_chars as $html => $converted) $text = ereg_replace($converted,$html,$text);
return($text);
}
 
versuchs mal so:

PHP:
<?php
$converted = htmlentities($phrase);
//$converted = eregi_replace(" ","%",$converted); // Platzhalter für * einsetzen
?>

die funktion convert_spc_chr() kommt mir etwas unsinnig vor, da sie die zeichen nicht mal richtig maskiert...

UTF-8 kann mit deutschen umlauten probleme bereiten, verwende stattdessen ISO-8859-1.

Nils aka XraYSoLo
 
Werbung:
ja, weil die einträge wohl noch die alte form haben.

umlaute müssen folgendermaßen umgeschrieben werden:
- ä : &auml;
- ö : &ouml;
- ü : &uuml;

bei großbuchstaben den ersten buchstaben eben groß schreiben.

Nils aka XraYSoLo
 
Werbung:
eben, genau da muss du umschreiben. da UTF-8 und ISO keine umlaute, sondern nur ASCII kennen und alles unbekannte als viereck oder fragezeichen darstellen.
manchmal unterschätzt man den zeichensatz und erst zum schluss merkt man, wie wichtig er in einer sprache mit sonderzeichen ist. überleg' mal: häbrähisch - KEINES unserer zeichen, die wäre ohne maskieren und anderer ISO verloren.

Nils aka XraYSoLo
 
da fehlt auch ein semikolon.
er interpretiert das & als sonderzeichen und erwartet &amp; . sollte normalerweise als umlaut dienen, wird aber wegen fehlendem strichpunkt nicht interpretiert.

Nils aka XraYSoLo
 
Werbung:
tatsächlich es funktioniert.

wenn aber jemand ein Wort mit Umlaut per Script in die
sql-Datenbank einträgt sollte dies automatisch umcodiert werden
wie kann man das im Script ändern?
 
UTF-8 kann mit deutschen umlauten probleme bereiten, verwende stattdessen ISO-8859-1.
Ohoho, das ist falsch, das gegenteil war richtig, heutzutage ist es sinnvoll seine Daten in utf-8 zu speichern, dann hat man die wenigsten Probleme. Das München nicht gefunden wurde, konnte an der collation liegen.

eben, genau da muss du umschreiben. da UTF-8 und ISO keine umlaute, sondern nur ASCII kennen und alles unbekannte als viereck oder fragezeichen darstellen.
manchmal unterschätzt man den zeichensatz und erst zum schluss merkt man, wie wichtig er in einer sprache mit sonderzeichen ist. überleg' mal: häbrähisch - KEINES unserer zeichen, die wäre ohne maskieren und anderer ISO verloren.
auch das ist nicht richtig. utf-8 kennt natürlich Umlaute und viele andere Zeichensätze.
Guck mal hebräisch:אֲנִי-אַתָּה-הוּא
in utf-8
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
ja, wenn sie maskiert sind. vor ein paar tagen hatte ein user, der eine türkische seite betreibt damit probleme, dass er sie umlaute DIREKT eingegeben hat, anstatt sie zu maskieren.
wenn ich schreibe, dass UFT-8 nur ASCII kann, bedeutet das nicht zwangsläufig, dass die kodierung auf 128 zeichen beschränkt abläuft.

wenn du mit deutschen umlauten (und ansonsten korrektem markup) UTF-8 verwendest, dann pass' mal auf, was der validator dazu meint.

Nils aka XraYSoLo
 
Dem Validator ist das egal, bzw. wird er dir anzeigen das das richtig ist. Und nein, die hebräischen Zeichen sind nicht maskiert, die hab ich so 1:1 kopiert und hier in das Feld eingegeben (html.de ist auch utf-8 ).
Wenn es auch einer türkischen Seite Probleme gab, dann war sie falsch kodiert.
 
Zurück
Oben