Umlaute mit str_replace(); umwandeln
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausgabe
code
datenbank
datensatz
datum
frage
funktion
grund
header
hut
kleinigkeit
machen
schenken
set
sonderzeichen
string
umlaut
url
urlaub
-
Hallo!
Ich wollte heute mal was an der Ausgabe von Umlauten ändern und habe auch schon einen entsprechenden Schnipsel - allerdings weiß ich nicht, wie ich den mit meiner Ausgabe von Datensätzen aus der Datenbank in Harmonie bringen kann. Ich kanns einfach nicht - mag mir Jemand dabei helfen?
Umlaute umwandeln:
<?php function sonderzeichen($string) { $string = str_replace("ä", "ae", $string); $string = str_replace("ü", "ue", $string); $string = str_replace("ö", "oe", $string); $string = str_replace("Ä", "Ae", $string); $string = str_replace("Ü", "Ue", $string); $string = str_replace("Ö", "Oe", $string); $string = str_replace("ß", "ss", $string); $string = str_replace("´", "", $string); return $string; } ?>
Meine Ausgabe eines Datensatzes, in dem die Umlaute umgewandelt werden sollen:
<?php echo (htmlentities($data["datensatz"])); ?>
Vielen Dank im Vorraus!
Gruß,
webdsignerin -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Gesamter Code;
webdesignerin schrieb:
Das sollte so aussehen:
Meine Ausgabe eines Datensatzes, in dem die Umlaute umgewandelt werden sollen:
<?php echo (htmlentities($data["datensatz"])); ?>
Mich interessiert aber der Grund warum du unbedingt Sonderzeichen ersetzen willst.<?php echo(htmlentities(sonderzeichen($data['datensatz']))); ?>
-
webdesignerin schrieb:
<?php function sonderzeichen($string) { $string = str_replace("ä", "ae", $string); $string = str_replace("ü", "ue", $string); $string = str_replace("ö", "oe", $string); $string = str_replace("Ä", "Ae", $string); $string = str_replace("Ü", "Ue", $string); $string = str_replace("Ö", "Oe", $string); $string = str_replace("ß", "ss", $string); $string = str_replace("´", "", $string); return $string; } ?>
Hallo,
Deine Funktion kannst Du auch vereinfachen.
<?php function sonderzeichen($string) { $search = array("Ä", "Ö", "Ü", "ä", "ö", "ü", "ß", "´"); $replace = array("Ae", "Oe", "Ue", "ae", "oe", "ue", "ss", ""); return str_replace($search, $replace, $string); } ?>
Eingesetzt wird die Funktion wie bereits hackyourlife beschrieben hat.
Gruß
staymyfriend -
hackyourlife schrieb:
<?php echo (htmlentities($data["datensatz"])); ?>
Das sollte so aussehen:
Mich interessiert aber der Grund warum du unbedingt Sonderzeichen ersetzen willst.<?php echo(htmlentities(sonderzeichen($data['datensatz']))); ?>
Dankeschön. Muss die Funktion str_replace(); an eine bestimme Stelle im Quelltext - z.B. ganz oben auf der Seite, nach der Abfrage oder irgendwo mittendrin) - oder ist das egal?
Weshalb ich Sonderzeicheneinsetzen möchte? Ich möchte lediglich, dass Sonderzeichen wie ä, ö, ü und ß richtig und nicht kryptisch aus der Datenbank ausgegeben werden. Richtig gespeichert werden sie ja bereits in der DB.
Gruß,
webdesignerin
Beitrag zuletzt geändert: 4.1.2012 19:53:34 von webdesignerin -
Kürzer geht auch
echo htmlentities($data["datensatz"]);
;)
str_replace() kann an jeder Stelle im Quelltext aufgerufen werden. Das ist nur wichtig, bei Funktionen, die z.B. den Header ändern müssen (und das muss ja vor der Ausgabe geschehen...).
Till -
und wenn du alles auf utf-8 umstellst, kannst du dir zukünftig den ganzen schmus schenken.
-
hemiolos schrieb:
und wenn du alles auf utf-8 umstellst, kannst du dir zukünftig den ganzen schmus schenken.
So blöd bin ich nun auch wieder nicht. Deinen "Rat" habe ich bereits versucht, aber da er nicht funktioniert hat, muss ich jetzt das Vorhaben anders umsetzen.
hackyourlife schrieb:
Das macht nicht das was gefragt ist.
Wieso denn nicht? Und was muss ich denn ändern, damit es das macht, was ich will?
Gruß,
webdesignerin
Beitrag zuletzt geändert: 4.1.2012 20:10:44 von webdesignerin -
webdesignerin schrieb:
Das macht nicht das was gefragt ist.
Wieso denn nicht? Und was muss ich denn ändern, damit es das macht, was ich will?
Das war Bezug nehmend auf das hier:tillpro schrieb:
echo htmlentities($data["datensatz"]);
Das macht eben nicht was du willst. Du willst folgendes:
hackyourlife schrieb:
<?php echo(htmlentities(sonderzeichen($data['datensatz']))); ?>
webdesignerin schrieb:
UTF-8 funktioniert immer, du hast aber warscheinlich irgendwo eine Kleinigkeit vergessen, deshalb hat es warscheinlich auch nicht funktioniert.
hemiolos schrieb:
und wenn du alles auf utf-8 umstellst, kannst du dir zukünftig den ganzen schmus schenken.
So blöd bin ich nun auch wieder nicht. Deinen "Rat" habe ich bereits versucht, aber da er nicht funktioniert hat, muss ich jetzt das Vorhaben anders umsetzen. -
webdesignerin schrieb:
ist etwas im neujahr schief gegangen dass du so agressiv bist? so habe ich das nämlich nicht gemeint.
... So blöd bin ich nun auch wieder nicht. Deinen "Rat" habe ich bereits versucht, aber da er nicht funktioniert hat, muss ich jetzt das Vorhaben anders umsetzen.
speicherst du quellcode mit utf-8 (ohne bom)?
speicherst du daten in die datenbank mit utf-8?
ist deine datenbank utf-8?
nur das war gemeint. von blöd keine rede -
hemiolos schrieb
Ist etwas im neujahr schief gegangen dass du so agressiv bist?
Nö, alles Bestens - Danke der Nachfrage. Es schallt halt immer aus dem Wald heraus, wie es hineinschallt.
Und selbst? Ist bei Dir vllt. was schief gegangen, dass Du gleich so empfindlich reagierst? Ach und bevor Du antwortest: Nein, ich will die Antwort nicht wissen, denn sowas bringt uns hier nicht weiter, also Schwamm drauf und zurück zum Thema.
hemiolos schrieb
speicherst du quellcode mit utf-8 (ohne bom)?
Im Header steht bei mir Folgendes:
<meta charset="utf-8">
hemiolos schrieb:
speicherst du daten in die datenbank mit utf-8?
Die Daten werden wie folgt übergeben und gespeichert:
mysql_query('SET NAMES "utf8"');
hemiolos schrieb:
ist deine datenbank utf-8?
Meine Datenbank hat folgende Kollation:
latin1_swedish_ci
Das besagte Projekt, um das es hier geht, habe ich bei einem anderen Anbieter (und damit auch Server) am Laufen - bei einem ähnlichen, hier auf lima-city gehosteten Projekt habe ich dieselbe Tabelle (ebenfalls in latin1_swedish_ci) und mit dem charset iso-8859-1 werden die Umlaute perfekt ausgegeben - nur beim anderen Anbieter eben nicht. Hut ab, wenn Du mir das erklären kannst, hemiolos...
hackyourlife schrieb:
UTF-8 funktioniert immer, du hast aber warscheinlich irgendwo eine Kleinigkeit vergessen, deshalb hat es warscheinlich auch nicht funktioniert.
Auf die "Kleinigkeit" bin ich aber gespannt, nachdem ich alles von innen nach außen gekrempelt und sie noch immer nicht gefunden habe. ^^
Gruß,
webdesignerin
-
webdesignerin schrieb:
Im Header steht bei mir Folgendes:
<meta charset="utf-8">
Der Meta-Tag ist zwar nett, im Grunde aber nutzlos (aber lass ihn drin). Der dient nur als Angabe falls der Server extrem schlecht konfiguriert ist und keinen richtigen Header zum Zeichensatz sendet.
Das am Anfang der PHP-Datei sagt dem Browser, dass utf-8 verwendet wird:
header ('Content-Type: text/html; charset=utf-8');
Die Daten werden wie folgt übergeben und gespeichert:
mysql_query('SET NAMES "utf8"');
Besser ist hier:
mysql_set_charset ('utf8');
Meine Datenbank hat folgende Kollation:
latin1_swedish_ci
Falscher Zeichensatz. Du musst einen der utf8_* (meist utf8_general oder utf8_unicode) nehmen.
Beitrag zuletzt geändert: 4.1.2012 23:32:28 von chatter -
webdesignerin schrieb:
... Hut ab, wenn Du mir das erklären kannst, hemiolos...
du kannst hut und sonst alles anbehalten, ich frage mich nur was latin1_swedish_ci und iso-8859-1 dort zu suchen haben? kannst du das erklären?
so wenig konpetenz in so viel antwort ... (es hat geheißen ÜBERALL utf-8).
helfe sich wer kann! ich glaube, ich fahre jetzt direkt von da auf urlaub. und tschüss -
hemiolos schrieb:
du kannst hut und sonst alles anbehalten, ich frage mich nur was latin1_swedish_ci und iso-8859-1 dort zu suchen haben? kannst du das erklären?
Das brauche ich nicht. Wer lesen kann ist klar im Vorteil! Den charset iso-8859-1 habe ich bei einem anderen Projekt auf lima-city verwendet, aber das ist nicht das Projekt, um das es hier im Thread geht (und trotzdem funktioniert damit eine korrekte Über- und Ausgabe von Umlauten). Wie war das noch gleich mit wenig Kompetenz und viel Antwort, mein lieber hemiolos?
ich glaube, ich fahre jetzt direkt von da auf urlaub. und tschüss
Sehr gut, dann kann man hier wenigstens wieder vernünftig und sachlich miteinander reden. Erhol Dich gut im Urlaub.
chatter schrieb:
Besser ist hier:mysql_set_charset ('utf8');[
Was ist denn der Unterschied zwischen mysql_query('SET NAMES "utf8"'); und mysql_set_charset ('utf8');?
chatter schrieb:
Falscher Zeichensatz. Du musst einen der utf8_* (meist utf8_general oder utf8_unicode) nehmen.
Ok, aber was ist besser - unicode oder general?
Gruß,
webdesignerin -
webdesignerin schrieb:
Ok, aber was ist besser - unicode oder general?
To further illustrate, the following equalities hold in both utf8_general_ci and utf8_unicode_ci (for the effect this has in comparisons or when doing searches, see Section 9.1.7.8, “Examples of the Effect of Collation”):
Ä = A
Ö = O
Ü = U
A difference between the collations is that this is true for utf8_general_ci:
ß = s
Whereas this is true for utf8_unicode_ci, which supports the German DIN-1 ordering (also known as dictionary order):
ß = ss
MySQL implements language-specific collations for the utf8 character set only if the ordering with utf8_unicode_ci does not work well for a language. For example, utf8_unicode_ci works fine for German dictionary order and French, so there is no need to create special utf8 collations.
utf8_general_ci also is satisfactory for both German and French, except that “ß” is equal to “s”, and not to “ss”. If this is acceptable for your application, you should use utf8_general_ci because it is faster. Otherwise, use utf8_unicode_ci because it is more accurate.
(http://dev.mysql.com/doc/refman/5.0/en/charset-unicode-sets.html) -
Hallo!
Ok also ich habe den Content Type im Header via PHP auf utf-8 geändert, die Tabellenkolltion auf utf8_unicode_ci umgestellt und trotzdem bekomme ich kryptische Zeichen als Platzhalter für die Umlaute angezeigt... also frage ich mich: Welche Kleinigkeit wurde übersehen? Das frage ich mich sowieso schon die ganze Zeit, weil ich das alles schon ausprobiert habe und zu keinem vernünftigen Ergebnis komme.
Edit: Ich habe mich anderswo noch ein bisschen ins Thema eingelesen und denke, dass es mit den alten Datensätzen zusammenhängt. Ich übertrage ja nicht seit Ewigkeiten, sondern erst seit vorgestern Daten im utf-8 Format an die Datenbank. Vorher hatte ich im Formular nicht definiert, in welcher Form die Daten an die Datenbank übermittelt werden sollen. Kann es daran liegen, dass ich die alten Datensätze vorher nach utf-8 umwandeln muss - wenn ja: wie?
Gruß,
webdesignerin
Beitrag zuletzt geändert: 5.1.2012 16:28:18 von webdesignerin -
Hallo
wenn die Daten (String) aus der Datenbank als UFT-8 ankommen
dann musst Du auch die Umlaute mit UTF-8 ersetzen.
<?php function sonderzeichen($string) { $search = array("Ä", "Ö", "Ü", "ä", "ö", "ü", "ß", "´"); $replace = array("Ae", "Oe", "Ue", "ae", "oe", "ue", "ss", ""); $search2 = array(); // ---- neues Such-Array im UTF-8 Format ---- foreach($search as $item) { $search2[] = utf8_encode($item); } return str_replace($search2, $replace, $string); } ?>
die "alten" Daten (nicht UTF-8 strings) aus der Datenbank umwandeln in UFT-8
mit einer Schleife und UPDATE SQL Befehl ...
dazu musst Du entweder die Stringst "kennen" (Datum / ID)
oder du gehts alle durch und prüfst auf UTF-8,
wenn nicht, dann utf8_encode und mit UPDATE speichern
Aufpassen, das Du einen String nicht zweimal codierst (doppelt encodest)
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage