kostenloser Webspace werbefrei: lima-city


Problem mit Umlaute aus mysql

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Hallo Zusammen,

    Ich habe ein Problem mit einen haufen von Umlauten in meiner Datenbank.
    Ich möchte gerne das Changelog aus einer Datenbank auslesen , funktioniert auch alles soweit das einzige Problem ist nur das er ä ö ü usw. nicht richtig darstellt.

    Wie schaffe ich es das mir das gelingt?

    Charset ist utf-8.


    Das hier habe ich schon ausprobiert , hat allerdings nicht geklappt.

    $change = $row->change;
    $change = str_replace("ü", "ü", $change);
    $change = str_replace("ö", "ö", $change);
    $change = str_replace("ä", "ä", $change);


    LG
  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.

    Was wird dir denn (fälschlicher Weise) statt den erwarteten Zeichen angezeigt?

    Stimmt die Collation der Tabelle / Spalte? Stimmt das Charset der HTML(?)-Seite?

    Vergiss sofort die
    ö
    & Co, die sind schon lange, aufgrund der Möglichkeiten, das richtige Charset angeben zu können, veraltet.
  4. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Es wird ein Karo in Schwarz mit einem Fragezeichen angezeigt.

    Ich habe grade mal das charset des tables upgedatet mit hilfe von :
    ALTER TABLE changelog CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;



    Das chartset ist auf jeder Seite auf utf-8 gesetzt.


    Dennoch keine verbesserung. Wie kann ich die denn ohne ü richtig darstellen?


    LG
  5. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Schwarzes Kästchen bedeutet, dass offenbar das Charset nicht mit dem Zeichen zusammenpasst, das du darstellen magst. Ich vermute mal stark, dass du der Seite zwar sagst, dass sie UTF-8 sein soll, die Daten aber als ISO 8859-1 von der DB empfängst oder aus PHP ausgibst.

    marvinkleinmusic schrieb:
    Wie kann ich die denn ohne ü richtig darstellen?
    Indem der angegebene Zeichensatz und die anzuzeigenden Zeichen zusammenpassen ;-)
  6. Autor dieses Themas

    marvinkleinmusic

    Kostenloser Webspace von marvinkleinmusic

    marvinkleinmusic hat kostenlosen Webspace.

    Ja das ist richtig die Daten wurden damals mit iso 8859-1 westeuropäisch in die Datenbank eingetragen.

    Aber sogar nach convertieren und kompletten leeren der Datenbank ist der fehler noch da

    Ich kann auch wenn ich will ein ü auf der Index Seite nicht darstellen obwohl diese Komplett in utf-8 gemacht ist.
    aber wie bekomme ich das jetzt hin das der das aus der Datenbank aus Richtig anzeigt?
    LG

    Beitrag zuletzt geändert: 22.8.2013 22:18:48 von marvinkleinmusic
  7. das tema hier bei lima ist schon ellen lang (lima suche schon probiert?) und du kannst außerdem für dein problem eigentlich tausende gute lösungen finden bei google (allein die ersten 10 [von 46000!] treffern sollten schon viel zu viel sein!).

    man zerfranzt sich die ganze zeit nur den mund :(

    Beitrag zuletzt geändert: 23.8.2013 1:22:29 von czibere
  8. apche muss auf utf-8: in der httpd.conf ein AddDefaultCharset utf-8, alternativ einen charset header mit php setzen.
    php muss auf utf-8: in der php.ini default_charset = "UTF-8", alternativ mit htcascess oder ini_set() php.net hilft.
    alle textdatein, also php, html müssen utf-8 ohne BOM kodiert sein, erkennt man daran, dass bei einem Asciieditor für umlaute 2 zeichen stehen, bzw bei einem editor irgentwo ein utf-8 steht, bei Scriptly steht unten immer Die Zeichenkpdierung und die art der Zeilenumbrüche.
    Die datenbank muss utf-8 sein, insbesondere die kollation der spalte.
    am besten verscuht du mal einen datensatz mit php einzufügen, bei phpmyadmin kann es eventuell nicht funktionieren.

    Dann sollte es eigentlich keine Probleme geben, es sei denn er Browser ist aus der Steinzeit.
    Wenn immernoch nicht, guck mal mit Firebug oder dem Chrome entwicklertool nach den http headern.
  9. s*************h

    Die Datei selber sollte man auch auf UTF-8 kodieren! Geht am besten mit Notepad++ (Kodierung -> UTF-8 ohne BOM). Und dann wie bereits erwähnt alle Bereiche welche die Daten anpacken, speichern und verarbeiten müssen auf UTF-8 gesetzt sein.

    Gruß S. Brosch
  10. unlikus schrieb:
    ... , bei phpmyadmin kann es eventuell nicht funktionieren ...
    wer verwendet bitte phpmyadmin!!??

    also ich fasse mal kurz zusammen:
    1. alle dateien, die auf die festplatte gebannt werden, werden in utf-8 dorhin gebannt;
    2. alle datenbanken und tabellen werden utf-8 erzeugt mit entsprechenden collation;
    3. die erste zeile einer css-datei heißt
    @charset "utf-8";
    , auch wenn die css-datei utf-8 gespeichert ist (weil sollte ja auch!).
    4. in xhtml-dateien steht (in dieser rehenfolge!)
    ...
      <head>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <title>...
      ...
    und in html5
    ...
      <head>
        <meta charset="utf-8">
        <title>...
    was ich für mich gegen xhtml dringend vorziehen würde!
    ...
    5./a für apache (in httpd.conf o. in .htaccess)
    AddType application/x-httpd-php;charset=utf-8 .php
    AddType application/x-httpd-php-source;charset=utf-8 .phps
    AddType text/css;charset=utf-8 .css
    AddType text/html;charset=utf-8 .html .htm
    AddType application/xhtml+xml;charset=utf-8 .xhtml

    5./b kann aber auch stehen:
    AddCharset utf-8 .css .htm .html .xhtml .php
    oder aber
    5./c pauschal für alle txt und html dateien kann auch stehen:
    AddDefaultCharset utf-8

    6./a wenn man keinen zugrif auf httpd.conf o. .htaccess hat, die lösung direkt im php-code ist:
    header('Content-Type: text/html; charset=utf-8');

    6./b alternativ dazu kann in php.ini
    default_charset = "utf-8"
    stehen;
    7. mit php_bis_v5.3/win können datei- u. direktory-namen nur mit utf8_decode() behandelt werden (code-beispiel):
    $dirname = 'ich_schwömme_im_glück';
    if(DIRECTORY_SEPARATOR === '\\') {
      $dirname = utf8_decode($dirname):
    }
    mkdir($dirname);

    8. für html-formulare ein beispiel:
    <form action="formular.php" accept-charset="utf-8" method="post">


    MYSQL:
    9./a in my.ini sectionen mysql und mysqld sollte es stehen:
    [mysql]
    default-character-set=utf8
    [mysqld]
    default-character-set=utf8
    default-collation=utf8_general_ci
    init-connect=SET NAMES `utf8`

    9./b wenn kein zugrif auf my.ini, dann:
    <?php
    $mysqli->set_charset('utf8');     // mysqli ab PHP5.2.3
    $dbh->exec('SET NAMES utf8');     // PDO
    mysql_set_charset('utf8');        // mysql ab PHP5.2.3
    mysql_query("SET NAMES `utf8`");  // veraltet


    EMAIL
    10./b content type muss im email header übergeben werden!
    <?php
    ...
    $header = "Content-type: text/plain; charset=UTF-8;\r\n";
    ...

    10./b beim abholen via imap, muss subject wie folgt behandelt werden:
    <?php
    ...
    $subject= mb_encode_mimeheader($subject,"UTF-8", "B", "\n");
    ...


    PHPMAILER
    11.
    <?php
    ...
    $mailer->CharSet = 'UTF-8';


    alte, nicht utf-8 projekte umstellen (die scripte leider nur für *nixe):
    $ cd /<path2rootdirectory>
    - zu apache rootdir.
    $ find ./ -type f -exec file --mime-encoding '{}' ';'
    - codierung der dateien anzeigen - das gibt dann so etwas aus wie:
    ./_forum/schlei/index.php: utf-8
    ./_forum/cookies/feed.php: utf-8
    ./_forum/cookies/index.php: us-ascii
    ./_forum/privatecitypage/index.php: us-ascii
    ./_forum/privatecitypage/upload.php: us-ascii
    ./_forum/privatecitypage/ftp.php: us-ascii
    ./_forum/xxxparenjxxx/CDatabase.php: utf-8
    ./_forum/xxxparenjxxx/db_data.php: utf-8
    ./_forum/xxxparenjxxx/index.php: us-ascii
    die zu konvertierenden dateien haben natürlich nicht die utf-8 codierung;
    man kann jetzt die nicht utf-8 dateien in einem editor umwandeln, oder durch script:
    find ./ -name '*.php' -o -name '*.phtml'|while read DATEI; do if file -b --mime-encoding $DATEI|grep -q 'iso-8859'; then mv "$DATEI" "${DATEI}-CONVTEMP" && iconv -f CP1252 -t UTF-8 "${DATEI}-CONVTEMP" > "$DATEI" && rm "${DATEI}-CONVTEMP" && echo " OK : $DATEI"; else echo "SKIP: $DATEI"; fi; done;

    für lokale-funktionen unter *nixe kann man meistens schreiben
    <?php
    ...
    setlocale(LC_ALL, 'de_DE.UTF-8', 'deu_deu');
    unter windows ist das anders. eventuell kann hier jemand das nötige dazu beisteuern ;)
  11. wenn man mal einen datensatz per hand eingibt, ist phpmyadmin, insbesonder hier unter lima eine schnelle methode.
    und utf-8 funktioniert dort leider nicht richtig, ein grund warum ich jetzt heidiSQL benutze, neben der performance und der fehlenden fremdschlüssel unterstützung.

    Das mit dem Fromular kann man sich sparen, wenn die utf-8 http header und die html utf-8 header gesetzt sind macht nicht mal der internetexplorer quatsch bei den formularen.
    Und bei allen strings, auf die der user keinen Einlfuss hat, würd ich auch nie sonderzeichen benutzen, insbesonder nicht für verzeichnisse.
  12. unlikus schrieb:
    wenn man mal einen datensatz per hand eingibt, ist phpmyadmin, insbesonder hier unter lima eine schnelle methode.
    und utf-8 funktioniert dort leider nicht richtig, ein grund warum ich jetzt heidiSQL benutze, neben der performance und der fehlenden fremdschlüssel unterstützung.

    Das mit dem Fromular kann man sich sparen, wenn die utf-8 http header und die html utf-8 header gesetzt sind macht nicht mal der internetexplorer quatsch bei den formularen.
    Und bei allen strings, auf die der user keinen Einlfuss hat, würd ich auch nie sonderzeichen benutzen, insbesonder nicht für verzeichnisse.
    nichts für ungut. ich habe vorhin alle mir bekannte eventualitäten beschrieben, ohne rücksicht auf verluste - sozusagen ;)

    interessant wären da noch irgendwelche erkenntnisse außer denen. so wie z.b. die scripte von oben für *nixe auch für windows zur verfügung zu stellen (wenn es überhaupüt möglich ist?)

    Beitrag zuletzt geändert: 24.8.2013 22:39:15 von czibere
  13. Ich lebe nach dem Motto: Wer Windows nutzt ist selbst schuld
    bis jetzt hat es mir weder an Geld noch an Funktionen gefehlt :D

    Es gibt eine einfache Möglcihkeit in Windows: Datein auf ein Linux System kopieren umkodieren und wieder zurück.
    Oder Microsoft verkauft einem ein GUI Tool dafür.
  14. unlikus schrieb:
    Ich lebe nach dem Motto: Wer Windows nutzt ist selbst schuld
    bis jetzt hat es mir weder an Geld noch an Funktionen gefehlt :D

    Es gibt eine einfache Möglcihkeit in Windows: Datein auf ein Linux System kopieren umkodieren und wieder zurück.
    möchtest das hier den leuten nicht verraten wie? (das wäre der sinn eines forums ;)

    Oder Microsoft verkauft einem ein GUI Tool dafür.
    und unter *nixe hast du solche en mass, ohne dafür zahlen zu müssen ;)
    (war das jetzt alles nicht off topic?)
  15. 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!