kostenloser Webspace werbefrei: lima-city


Umlaute mit str_replace(); umwandeln

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo! :wave:

    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 :angel:
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Gesamter Code;
    webdesignerin schrieb:
    Meine Ausgabe eines Datensatzes, in dem die Umlaute umgewandelt werden sollen:

    <?php 
    echo  (htmlentities($data["datensatz"])); 
    ?>
    Das sollte so aussehen:
    <?php
    echo(htmlentities(sonderzeichen($data['datensatz'])));
    ?>
    Mich interessiert aber der Grund warum du unbedingt Sonderzeichen ersetzen willst.
  4. 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
  5. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    hackyourlife schrieb:

    <?php 
    echo  (htmlentities($data["datensatz"])); 
    ?>


    Das sollte so aussehen:
    <?php
    echo(htmlentities(sonderzeichen($data['datensatz'])));
    ?>
    Mich interessiert aber der Grund warum du unbedingt Sonderzeichen ersetzen willst.


    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 :angel:

    Beitrag zuletzt geändert: 4.1.2012 19:53:34 von webdesignerin
  6. t*****o

    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
  7. und wenn du alles auf utf-8 umstellst, kannst du dir zukünftig den ganzen schmus schenken.
  8. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    tillpro schrieb:
    Kürzer geht auch
    echo  htmlentities($data["datensatz"]);

    ;)
    Das macht nicht das was gefragt ist.

    hemiolos schrieb:
    und wenn du alles auf utf-8 umstellst, kannst du dir zukünftig den ganzen schmus schenken.
    Und die Benutzer müssen sich nicht mehr mit ae,... herumquälen.
  9. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    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. :rolleyes:

    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? :confused:


    Gruß,
    webdesignerin :angel:

    Beitrag zuletzt geändert: 4.1.2012 20:10:44 von webdesignerin
  10. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    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? :confused:


    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:
    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. :rolleyes:
    UTF-8 funktioniert immer, du hast aber warscheinlich irgendwo eine Kleinigkeit vergessen, deshalb hat es warscheinlich auch nicht funktioniert.
  11. webdesignerin schrieb:
    ... 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. :rolleyes:
    ist etwas im neujahr schief gegangen dass du so agressiv bist? so habe ich das nämlich nicht gemeint.
    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 :rolleyes:
  12. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    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. :thumb:

    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. :cookie:

    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 :angel:

  13. 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
  14. 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 :wave:
  15. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    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? :biggrin:

    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. :wave:

    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');? :confused:

    chatter schrieb:
    Falscher Zeichensatz. Du musst einen der utf8_* (meist utf8_general oder utf8_unicode) nehmen.

    Ok, aber was ist besser - unicode oder general? :confused:


    Gruß,
    webdesignerin :angel:
  16. 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)
  17. Autor dieses Themas

    webdesignerin

    Kostenloser Webspace von webdesignerin

    webdesignerin hat kostenlosen Webspace.

    Hallo! :wave:

    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? :confused:


    Gruß,
    webdesignerin :angel:

    Beitrag zuletzt geändert: 5.1.2012 16:28:18 von webdesignerin
  18. 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)




  19. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!