Autor |
Nachricht |
AndiN
Threadersteller
Dabei seit: 31.05.2005
Ort: -
Alter: 41
Geschlecht:
|
Verfasst So 18.05.2008 21:58
Titel Umlaute umwandeln |
|
|
Hallo zusammen,
ich habe ein Array in welchem diverse Suchstrings stehen die ich dann später auf eine Volltextsuche loslasse. Die mir dann alle Einträge liefert die mit einemd er im Suchstring-Array stehenden Strings übereinstimmen. Ich selbst habe leider keinen Einfluss darüber ob Umlaute als ä ö und ü oder mit den entsprechenden HTML-Zeichen in dieser DB abgespeichert sind. Beides ist möglich.
Daher habe ich mir folgende "Übersetzungstabelle" gebastelt:
foreach($array_suchstrings as $val1)
{
$val1 = str_replace("ä","ä",$val1);
$val1 = str_replace("ö","ö",$val1);
$val1 = str_replace("ü","ü",$val1);
$val1 = str_replace("Ä","Ä",$val1);
$val1 = str_replace("Ö","Ö",$val1);
$val1 = str_replace("Ü","Ü",$val1);
$val1 = str_replace("ä","ß",$val1);
$val3.= $val1.",";
}
foreach($array_suchstrings as $val2)
{
$val2 = str_replace("ä","ä",$val2);
$val2 = str_replace("ö","ö",$val2);
$val2 = str_replace("ü","ü",$val2);
$val2 = str_replace("Ä","Ä",$val2);
$val2 = str_replace("Ö","Ö",$val2);
$val2 = str_replace("Ü","Ü",$val2);
$val2 = str_replace("ß","ä",$val2);
$val4.= $val2.",";
}
$val5 = $val3.$val4;
$val5 ist dann die Grundlage für meine DB-Abfrage nach dem Motto "Gebe mir alle Tabelleneinträge aus in welchem du eines der Wörter findest die in $val5 stehen". Die Methode funktioniert zwar, ist mir jedoch zu lang und hat auch das Problem, dass nur Umlaute, jedoch keine anderen Sonderzeichen erfasst werden.
Daher habe ich es mit Folgendem probiert:
foreach($array_suchstrings as $val1)
{
$a = strtr($val1,array_flip(get_html_translation_table(HTML_SPECIALCHARS)));
$val1 = htmlspecialchars($a);
$val5.= $val1.",";
}
Leider funktioniert das nicht. Er findet nur Strings die mit ä ö oder ü geschrieben sind.
Warum?
|
|
|
|
|
Spurlos
Dabei seit: 29.10.2005
Ort: -
Alter: 41
Geschlecht:
|
Verfasst So 18.05.2008 23:07
Titel
|
|
|
die frage ist ma,
wozu brauchst du das im heutigen web?
1 gibt es funktionen für sowas
2 sollte man sich einfach den richtigen html header setzen
3 dabei drauf acheten das die iso norm stimmt
dann muss man auch nich so ein array basteln
|
|
|
|
|
Anzeige
|
|
|
AndiN
Threadersteller
Dabei seit: 31.05.2005
Ort: -
Alter: 41
Geschlecht:
|
Verfasst So 18.05.2008 23:19
Titel
|
|
|
zu Nr. 1)
welche Funktionen gibt es denn da?
zu Nr. 2 und 3)
Wenn ich eine DB habe in der die Begriffe "Östereich" und "Österreich" stehen können (da diese DB von verschiedenen Quellen befüllt wird auf die ich keinen Einfluss habe), ich jedoch beide Einträge finden möchte wenn ein User nach "Österreich" sucht. Was hat das mit dem Header - sprich der ISO-Norm meiner Ausgabedatei zu tun?
|
|
|
|
|
m
Moderator
Dabei seit: 18.11.2004
Ort: -
Alter: -
Geschlecht:
|
Verfasst So 18.05.2008 23:28
Titel
|
|
|
Wenn es nicht anders geht, nutz einfach htmlentities().
Also zwei Suchbegriffe:
$phrase1 = 'Österreich';
$phrase2 = htmlentities('Österreich', ZEICHENSATZ);
|
|
|
|
|
AndiN
Threadersteller
Dabei seit: 31.05.2005
Ort: -
Alter: 41
Geschlecht:
|
Verfasst So 18.05.2008 23:42
Titel
|
|
|
@m:
Vielen Dank schonmal.
Wenn jetzt jedoch jemand nach "Österreich" "Küste" und "Mühle" sucht hätte ich plötzlich statt drei Suchbegriffen sechs Suchbegriffe. Das würde meinen Webserver als das Doppelte an Zeit benötigen um die Abfrage durchzuführen.
Hm... gibt's da nicht eine Lösung die von der Performance her sinnvoller ist?
Da ich sehr viele DB-Felder durchsuchen muss, wird meine Abfrage dadurch ja rießig lang. Letzendlich muss ich jeden Suchstring in jedem Feld suchen. Wenn ich also 30 DB-Felder durchsuchen muss, benötige ich im o.g. Fall eine SELECT mit 180 (6 Begriffe x 30 Spalten) "feld LIKE '%.$suchstring.%'"-OR-Verknüpfungen.
Das ist irgendwie ziemlich suboptimal.
|
|
|
|
|
Spurlos
Dabei seit: 29.10.2005
Ort: -
Alter: 41
Geschlecht:
|
Verfasst So 18.05.2008 23:45
Titel
|
|
|
Code: |
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
|
versuch das mal bitte
ansonsten wie schon gesagt htmlentities()
http://de.php.net/manual/en/function.htmlentities.php
€dit sagt:
vllt sollte ich alles posten
Code: |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3c.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
</head> |
Zuletzt bearbeitet von Spurlos am So 18.05.2008 23:49, insgesamt 1-mal bearbeitet
|
|
|
|
|
AndiN
Threadersteller
Dabei seit: 31.05.2005
Ort: -
Alter: 41
Geschlecht:
|
Verfasst Mo 19.05.2008 00:01
Titel
|
|
|
@Spurlos:
Mal abgesehen davon, dass im Internet eigentlich eher charset=utf-8 an der Tagesordnung ist, verstehe ich immer noch nicht was mir das bei der Suche in der Datenbank bringen soll. Mein Problem ist nicht die Ausgabe, sondern die "Formatierung" der Keywords für die Volltextsuche in der Datenbank.
htmlentities() alleine bringt mir glaube ich nichts da ich ja beide Fälle in der DB stehen habe. Also sowohl Umlaute als auch die entsprechenden HTML-Zeichenketten. Oder sehe ich das falsch?
Zuletzt bearbeitet von AndiN am Mo 19.05.2008 00:02, insgesamt 1-mal bearbeitet
|
|
|
|
|
choise
Dabei seit: 01.02.2007
Ort: Würzburg
Alter: 35
Geschlecht:
|
Verfasst Mo 19.05.2008 07:33
Titel
|
|
|
wie werden die daten in die datenbank gebacht ?
du könntest doch mit einer funktion alle umlaute auslesen und anpassen.
danach sorgst du dafür, dass nur noch eine schreibversion der umlaute
in die db geschrieben werden.
|
|
|
|
|
|
|
|
Ähnliche Themen |
PHP Umlaute
PHP Mailformular umlaute
Mailformular Umlaute
html umlaute
Umlaute im Kontakformular
umlaute im gästebuch
|
|