verschiedene PHP-Codierungen

  1. Herausgeber
  2. x64 (auch bekannt als andi)

unerfahrene Drehbuchautoren interessieren sich nicht für so etwas wie Kodierung

unerfahrene Drehbuchautoren interessieren sich nicht für so etwas wie Kodierung. Daher kann es auf Websites manchmal zu einem fürchterlichen Durcheinander kommen, wenn die Daten aus der Datenbank in einer Codierung abgerufen werden, die Seite in einer anderen gebildet wird und der Server die dritte erhält. Infolgedessen, wenn die Seite entschlüsselt werden kann, mindestens zweimal. Also, warum passiert so ein Problem und wie kann man es überwinden?

Im russischen Segment findet man am häufigsten die sogenannte Windows-Codierung. nenne es anders: windows-1251, cp1251 oder sogar ansi. der nächste ist utf-8. Sie können auch den Namen Unicode finden, dies ist jedoch nicht ganz korrekt, da Unicode der allgemeine Name für die gesamte Gruppe ist (utf-8, utf-16, utf-32). und eine sehr beliebte Rarität ist koi8-r oder einfach koi-8 - die einst beliebte Linux-Codierung. Natürlich ist es möglich, im russischen Segment etwas anderes zu treffen, aber dies ist eher ein "Genuss" des Autors.

Der Hauptunterschied zwischen utf-8 und anderen (hauptsächlich Windows-1251 und Koi8-R) ist das letzte Byte, und die maximale Anzahl von Zeichen, die mit diesen Kodierungen dargestellt werden können, ist auf 256 begrenzt. Es versteht sich von selbst, dass für eine vollständige Darstellung des Textes dies gilt kann nicht genug sein. und für html wurde eine lösung gefunden - die verwendung von sogenannten mnemonics. zum beispiel:

© - & copy;

Zusätzlich zu der Tatsache, dass jedes solche Zeichen durch eine Gruppe von Zeichen beschrieben wird, wird der Code unlesbar und die Arbeit mit dem Text wird komplizierter. hier kommt der multibyte utf-8 zur rettung. Es ist sehr praktisch, Buchstaben mit unterschiedlichen Buchstaben und Symbolen in einem Text zu verwenden.

Der komfortabelste Satz von Anfangsbedingungen lautet daher wie folgt: Die Codierung der Datenbank, der PHP-Skripte und der HTML-Seiten / JS-Skripte sollte identisch sein. Natürlich können Sie auch andere verwenden, aber in diesem Fall besteht die Gefahr, dass Sie verwirrt werden. Es spielt keine Rolle, welche Codepage verwendet wird. Wenn die Seite nur für ein russischsprachiges Publikum ist, wird Windows-1251 ausreichen. Andernfalls wäre utf-8 die logische Wahl. Die erste Option ist mehr oder weniger klar. Die Multibyte-Codierung erfordert einige Gesten.

Wenn Sie mit utf-8 arbeiten, funktioniert ein Standardnotizblock nicht ! Fakt ist, dass dieser Editor beim Speichern einer Datei in dieser Codierung eine Signatur am Anfang hinzufügt - 3 Zeichen, die sogenannte Stückliste (Byte Order Mark), mit der die Codierung beim Öffnen einer Datei bestimmt werden kann. Es ist besser, einen anderen Editor zu wählen: notepad2 oder Notizblock ++ . In den Einstellungen müssen Sie wählen, ohne eine Signatur zu speichern.

Der nächste wichtige Schritt ist die Arbeit mit der Datenbank. Es ist äußerst wünschenswert, dass die Codierung des Basis- / Tabellen- / Textfelds mit der Skriptcodierung übereinstimmt (dies kann cp1251 oder utf-8 oder etwas anderes sein). Wenn die Daten aus der Datenbank in Form von "zyuk" abgerufen werden, unterscheidet sich die Codierung der Verbindung höchstwahrscheinlich von den in der Datenbank gespeicherten Daten. Die folgende Abfrage hilft, die Situation zu überwinden (wird sofort nach dem Herstellen der Verbindung zur Datenbank ausgeführt):

Wenn die Site Windows-1251 verwendet, sollten Sie es angeben - cp1251.

Im Allgemeinen gibt es nichts Schwieriges. Nur, die Standard-PHP-Funktionen funktionieren nicht mit Multibyte-Strings. Es gibt jedoch Standardbibliotheken, die helfen, die Situation zu korrigieren: iconv und mbstring . Für reguläre Ausdrücke gibt es auch einen notwendigen Schalter, der mit dem Modifikator u aktiviert wird.

Nun, die Daten aus der Datenbank werden erhalten, die Skripte werden nach allen Regeln geschrieben. Es bleibt, den richtigen Titel zu senden und den Seitencode im Browser des Benutzers anzuzeigen. Wir senden Überschrift so:

Header ('Inhaltstyp: text / html; Zeichensatz = utf-8');

Wenn eine Einzelbyte-Codierung verwendet wird, ist der Wert für den Zeichensatz unterschiedlich - Windows-1251 . Danach sollten keine Probleme mehr bestehen.

Einige einfachste Beispiele für die Arbeit mit utf-8 in PHP:

Beispiel 1: iconv, Anzahl der Zeichen pro Zeile

$ s = 'string'; # string in utf-8 $ cnt1 = strlen ($ s); # enthält den Wert $ 12 cnt2 = iconv_strlen ($ s, 'UTF-8'); # richtiger Wert, 6

Beispiel 2: mbstring, die Anzahl der Zeichen in einer Zeichenfolge

$ s = 'string'; # string in utf-8 $ cnt1 = strlen ($ s); # enthält den Wert $ 12 cnt2 = mb_strlen ($ s, 'UTF-8'); # richtiger Wert, 6

Beispiel 3: reguläre Ausdrücke, Suchen und Ersetzen

$ s = 'String'; # Zeile in utf-8 $ s = preg_replace ('/ p / i', 'd', $ s); # Ersatz findet nicht statt $ s = preg_replace ('/ p / iu', 'd', $ s); # Ergebnis word dock

Der i- Modifikator schreibt die Suche vor, bei der die Groß- und Kleinschreibung nicht berücksichtigt wird, und der u- Modifikator weist die reguläre Ausdrucks-Engine an, mit utf-8-Zeichenfolgen zu arbeiten.

wenn jemand sagt, dass php nicht mit utf-8 funktionieren kann, wird es falsch sein. Seit einigen Jahren mache ich alle meine Projekte mit dieser Kodierung und es gab überhaupt keine Probleme. Suchmaschinen selbst haben diese wunderbare Kodierung schon lange verwendet.

Herausgeber

offline 11 Stunden

x64 (auch bekannt als andi)

Anmerkungen: 2846 Veröffentlichungen: 395 Anmeldung: 02-04-2009

Also, warum passiert so ein Problem und wie kann man es überwinden?