Text-Encoding in PHP

Dieses Thema im Forum "Software" wurde erstellt von MacBelwinds, 9. August 2006.

  1. MacBelwinds

    MacBelwinds New Member

    Ich habe in meine Webseite eine PHP-Suchfunktion eingebaut, die mir Umlaute falsch auswirft:

    // set up an array containing input parameters to be passed to the remote procedure
    $params = array(
    'key' => $googlekey, // google key
    'q' => $querystring, // search term
    'start' => 0, // start from result n
    'maxResults' => 10, // show a total of n results
    'filter' => true, // remove similar results
    'restrict' => '', // restrict by topic
    'safeSearch' => true, // remove adult links
    'lr' => 'de', // restrict by language
    'ie' => 'ISO8859-1', // input encoding
    'oe' => 'ISO-8859-1' // output encoding
    );

    Man kann in dem PHP-array input und output encoding definieren, aber da habe ich von utf-8 bis iso-8859-1 schon alles durch...

    Es geht um diese Seite (Suchbox ganz unten).

    Kennt sich jemand in PHP gut genug aus, um mir zu helfen?
     
  2. mats

    mats New Member

    Interressante Frage - hab da ein bisschen nachgeforscht.

    Opera und Firefox haben keine Probleme mit den Umlauten in den LiveSearch-Resultaten. Daher tippe ich auf einen WebKit-Bug.

    Grundsätzlich lässt sich folgendes sagen:
    Das Standardcodierung für XML ist UTF-8. Sehr wahrscheinlich sind die Antworten, die von Google geliefert werden somit auf jedenfall auch UTF-8 codiert, egal, was du angegeben hast.
    Vielleicht klappt es, wenn du die ganze Seite mit <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> als UTF-8 codiert kennzeichnest...
     
  3. ggd

    ggd New Member

  4. MacBelwinds

    MacBelwinds New Member

    Mit diesem Hinweis kann Safari immerhin eine Eingabe wie "Lübeck" wieder fehlerfrei ausführen, aber die Eregbnisse sind auch mit UTF-8 verhunzt...

    Danke schon einmal.

    Zu dem anderen Tipp: baue ich diese htmlentities-Funktion in dasselbe php-Skript mit ein, ode rmuss das irgendwo in den Quelltext der HTML-Seite?
     
  5. ggd

    ggd New Member

    Hi,

    ich bin mir noch nicht so ganz sicher, ob ich verstanden habe, wie diese Live-Suche funktioniert. Ich benutze htmlentities() immer, wenn beispielsweise Benutzereingaben wieder korrekt dargestellt werden sollen.

    htmlentities(Lübeck) würde dann L&uuml;beck ausgeben. Die Ergebnisse die Angezeigt werden kommen aber von Google, oder? Ich glaube, dann ist es nicht effizient, quasi das ganze Google-Ergebnis durch diese Funktion zu schicken. Da ist wohl der Tip mit dem charset=utf-8 am besten.

    Grüße, Gabriel
     
  6. MacBelwinds

    MacBelwinds New Member

    Wie gesagt: UTF-8 hat nur die Fehler bei der Eingabe beseitigt, nicht aber die Ausgabe-Fehler, die in fehlerhaften Umlauten bestehen.

    Diese LiveSearch funktioniert so:
    1. in einer HTML-Seite (bei mir index.htm) sitzt ein leicht modifiziertes Suchformular.
    2. Das Formular greift auf ein externes PHP-Skript und ein externes Javascript zu, die jeweils Teie der Live-Suche bewerkstelligen.

    Das Text encoding muss also entweder in der HTML-Seite und/oder in dem PHP-Skript erfolgen. Das Javascript hat darauf keinen Einfluss, glaube ich.
     
  7. mats

    mats New Member

    Das ganze LiveSearch-Ding ist ziemlich komplex:
    Ein JavaScript überwacht das Textfeld. Sobald da etwas eingegeben wird, startet es einen XMLHttpRequest an ein PHP-Skript, welches seinerseits bei Google eine Suchabfrage startet und die Resultate wieder an das JavaScript (per HMLHttpRequest.responseText) zurückgibt, welches schliesslich die Suchtreffer im DOM der Seite einbaut. So.

    Und wo jetzt genau der Safari ein Problem hat, weiss ich auch nicht (bei Firefox besteht das Problem ja nicht).
    Vielleicht hilft es, wenn man im PHP-Script die Daten, die von Google kommen, mit htmlentities() aufbereitet, bevor sie an den Browser gesendet werden.
     

Diese Seite empfehlen