Frage

Wie kann ich wissen, welche Codierung wird von PHP verwendet werden, wenn Daten an den Browser sendet? D. h mit den Cotent-Type-Header, zum Beispiel:. iso-8859-1

War es hilfreich?

Lösung

In der Regel Apache + PHP-Server von Webhoster ist so konfiguriert, auszusenden NO charset Header . Der kürzeste Weg zu testen, wie Ihr Server konfiguriert sind diese:

  • Verwenden Sie dieses Tool, um die Server-Header, um zu sehen durch jeden Ihrer Seiten auf Ihrer Webiste bekommen . Wenn in den Server-Header Sie eine charset sehen es bedeutet, dass Ihr Server ist, in der Regel wird es keinen charset enthalten.
  • Eine andere Möglichkeit ist dieses einfache Skript auf dem Server ausgeführt werden. <?php echo ini_get('default_charset'); ?> Wie oben dies in der Regel gesagt druckt eine leere Zeichenfolge aus, wenn andere es Ihnen die charset der PHP zeigen

Die zweite Lösung wird angenommen, Apache ist nicht mit AddDefaultCharset some_charset konfiguriert, das nicht der Fall ist in der Regel, aber in diesem Fall fürchte ich Apache-Einstellung kann die PHP außer Kraft setzen deafult_charset ini-Richtlinie.

Andere Tipps

Sie können die header () Lösung verwenden, die William vorgeschlagen, aber wenn Sie Apache laufen, und der Apache-Konfigurations einen Standard-Zeichensatz verwendet, das jedes Mal (Internet Explorer verrückt gehen) gewinnen sehen: AddDefaultCharset

Beachten Sie, dass Content-Typen und Kodierungen sind zwei verschiedene Dinge. text / html ist ein Content-Typ; ISO-8859-1 und UTF-8-Codierungen.

Der HTTP-Response-Header, die der Server wie dies in der Regel sieht sendet:

Content-Type: text/html; charset=utf-8

„charset“ ist eigentlich die Zeichenkodierung. Es ist nicht in einem separaten Header; jedoch gibt es einen Header „Content-Encoding“ genannt, was eigentlich, welche Art von Kompression gibt die Antwort verwendet (zum Beispiel gzip).

Wenn Sie die Zeichenkodierung UTF-8 zu ändern, in einer Datei, die HTML enthält:

<?
header("Content-Type: text/html; charset=utf-8");

Sie können Ihre eigene mit header('Content-type: xxx/yyy'); gesetzt, aber ich glaube, dass text / html standardmäßig gesendet wird.

AFAIK, sendet PHP Strings byteweise. das heißt, wenn Sie Ihre Variablen halten UTF-8, wird es UTF-8 senden. wenn Sie iso-8859-1 haben, wird es das auch senden. wenn Sie sie mischen, wird es nicht schön sein.

Wenn Ihr Server keine Standardinhalt oder charset so konfiguriert, und keiner ist PHP, wird PHP nur Content-Type: text/html senden - es wird kein charset überhaupt angeben, und die Bytes senden, wie es sie im Skript sieht .

Wenn ein Browser eine Seite ohne charset erhält angegeben, können verschiedene Dinge passieren:

  • die meisten Browser haben eine „Codierung / Charset“ Menü; wenn der Benutzer explizit wählt man, versucht der Browser, sie anzuwenden. Nicht zu oft passieren, so:
  • versuchen einige Browser mit einem Standard-Zeichensatz zu machen (die locale-abhängig ist, zum Beispiel für FF und cs_CZ früher iso-8859-2 werden; YMMV)
  • IE wird versuchen, die charset heuristisch zu bestimmen (es wird eine Vermutung zu nehmen, basierend auf Zeichenverteilung - und oft es wird es recht, manchmal wird es es falsch, und Sie erhalten eine Seite in Rumänisch als chinesischen Text interpretiert, die in der Regel bedeutet "nicht lesbar")
  • einige alte Browser auf us-ascii fallen zurück

Wenn Sie mit diesem Verfahren, das charset PHP-Skript und dem charset Matches Browser, der Text - aus Versehen - lesbar sein. Wenn nicht, wird es seltsame Zeichen und ähnliche Erscheinungen sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top