Umlaute in PHP & HTML

Nö, eben nicht.
Diese 3 Variablen müssen halt auch die entsprechenden Werte haben, und da hat der Datensatz der Tabellen keinen Einfluss drauf.

Es sollte aber nicht sehr umständlich zu bewerkstelligen sein, in seiner DB-Klasse dies kleine Query einzubauen :)

Achso, das ist natürlich blöd!

Eigentlich nicht, aber wenn ich PDO benutze? Sollte ich dann beim erstellen des PDO Objekt ein Query mit "SET names utf8"abstezten? Und mit was soll ich den "names" ersetzten? :)
 
Achso, das ist natürlich blöd!

Eigentlich nicht, aber wenn ich PDO benutze? Sollte ich dann beim erstellen des PDO Objekt ein Query mit "SET names utf8"abstezten? Und mit was soll ich den "names" ersetzten? :)

Jo, PDO erzeugen und als erstes das Query. Das "names" musst du nicht ersetzen, das Query kann so bleiben, wie ich es gepostet habe(mal vom Zeichensatz abgesehen, falls du einen anderen möchtest).
 
Jo, PDO erzeugen und als erstes das Query. Das "names" musst du nicht ersetzen, das Query kann so bleiben, wie ich es gepostet habe(mal vom Zeichensatz abgesehen, falls du einen anderen möchtest).

Okay, gut, vielen Dank!

Der Query setzt ja die Variablen für diese Sitzung auf utf8, aber trotzdem müssen meine Tabelle auch den UTF-8 Zeichensatz haben, oder?
 
Okay, gut, vielen Dank!

Der Query setzt ja die Variablen für diese Sitzung auf utf8, aber trotzdem müssen meine Tabelle auch den UTF-8 Zeichensatz haben, oder?

Jo, das wäre schon gut, ist aber nicht unbedingt zwingend.

MySQL geht da folgendermaßen vor:
Es bekommt die Daten beim Eintragen in irgendeinem Zeichensatz.
Welcher das angeblich ist, bestimmt character set client . Der Client sollte also auch wirklich die Daten in dem korrekten Zeichensatz abschicken(tut er bei dir ja, soweit ich es verstanden habe).

MySQL nimmt die Daten nun entgegen, und konvertiert sie, falls character set client nicht mit dem Zeichensatz der Tabelle übereinstimmt, zu dem Zeichensatz der Tabelle...so werden sie dann auch eingetragen.

Beim Abholen der Daten geht es umgekehrt:
MySQL holt die Daten aus der Tabelle. In welchem Zeichensatz der Client die Daten erhält, bestimmt character set results.
Ist dieser Zeichensatz wiederum anders, als der der Tabelle, werden die Daten zu character set results konvertiert....und so an den Clienten gesendet.

Dies ganze Konvertieren kann jedoch Probleme in sich bergen:
http://dev.mysql.com/doc/refman/5.1/de/charset-connection.html hat gesagt.:
Die Konvertierung kann verlustbehaftet sein, wenn Zeichen verwendet werden, die nicht in beiden Zeichensätzen vorhanden sind.
daher bist du auf der ganz sicheren Seite, wenn alle beteiligten Parteien den selben Zeichensatz verwenden.
 
Okay, jetzt bin ich mir doch fast sicher das ich alles verstanden habe :)

Vielen Dank an dich & natürlich auch an alle anderen!
 
So bevor ich ein neues Thema aufmache, schreib ich es hier rein! Habe schon wieder ein Umlaute-Problem -_- Diesmal ohne MySQL sondern nur PHP!

Mein Code sieht wie folgt aus:
PHP:
    header('Content-Type: text/html; charset=utf-8');

    $string = strtolower('8025 Hallo an alle: Über mich!');
    $return = '';

    $search  = array('ä', 'ö', 'ü', 'ß');
    $replace = array('ae', 'oe', 'ue', 'ss');
    $string  = str_replace($search, $replace, $string);

    for($i = 0; $i < strlen($string); $i++) {
        if($string{$i} == ' ') {
            $return .= '-';
        } elseif(preg_match('/[0-9a-z]/', $string{$i})) {
            $return .= $string{$i};
        }
    }

    echo $return;

Wie ihr seht, ich will Strings umschreiben! Nur macht er aus dem 'ü' in $string ü => 㜠oder mit UTF-8 also der Header Information wieder das schöne Fragezeichen ?

Das komische, ich habe es auch versucht mit Daten aus der DB, die normalerweise korrekt angezeigt werden! Weiß dazu vllt jemand etwas?
 
Zuletzt bearbeitet:
Oh da kann ich vielleicht helfen..
Nimm die Funktion php.net/strtr

PHP:
	    $dt = get_html_translation_table(HTML_ENTITIES+HTML_SPECIALCHARS);
	    $tt = strtr($tt,$dt);

Wobei in $tt der Text und in $dt die zu ändernden Werte sind.
HTML_ENTITIES kannst du weglassen, du möchtest ja nur die Buchstaben übersetzt. wissen.
---------------------------------------------

Ich hab das mal fix mit deiner Funktion kombiniert. Du musst zuerst deine $return bilden, keine Ahnung was das darstellen soll *klär mich mal auf ;)* und danach die Umwandlung vornehmen.
Dann dürfte es funtkionieren
 
Zuletzt bearbeitet:
Die Ursache dürfte sein, dass die PHP-String-Funktionen derzeit noch standardmässig mit Latin1 arbeiten.

Verwende stattdessen die MB-String-Funktiionen

Habe ich schon probiert! Er bringt mir bei mb_detect_encoding($string); UTF-8 und auch mit der Konvertier Funktion hat es nicht geklappt!

Fragt mich jetzt nicht warum, aber aufeinmal gehts!
Ich habe zu erst diese Funktion von php.net ausprobiert:
PHP:
<?php

function normalize ($string) {
    $table = array(
        'Š'=>'S', 'š'=>'s', '?'=>'Dj', '?'=>'dj', 'Ž'=>'Z', 'ž'=>'z', '?'=>'C', '?'=>'c', '?'=>'C', '?'=>'c',
        'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
        'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
        'Õ'=>'O', 'Ö'=>'O', 'Ø'=>'O', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
        'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
        'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
        'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
        'ÿ'=>'y', '?'=>'R', '?'=>'r',
    );
   
    return strtr($string, $table);
}

?>

Aber dann gings auch ohne Sie! Naja hoffen wir mal das es so bleibt! :) Danke trotzdem!

#EDIT:
Kleine Info noch, sobald ich den String mit strtolower() behandle passiert der Fehler wieder! Das umgehe ich nun einfach!
 
Zuletzt bearbeitet:
Zurück