Suche…


Bemerkungen

  • Sie müssen sicherstellen, dass Sie bei jeder Verarbeitung eines UTF-8-Strings sicher arbeiten. Dies ist leider der schwierige Teil. Wahrscheinlich möchten Sie die mbstring Erweiterung von PHP ausgiebig nutzen.

  • PHP integrierte String - Operationen sind nicht standardmäßig UTF-8 sicher. Es gibt einige Dinge, die Sie mit normalen PHP-Zeichenfolgenoperationen (z. B. Verkettung) mbstring können. Für die meisten Dinge sollten Sie jedoch die entsprechende Funktion mbstring verwenden.

Eingang

  • Sie sollten jeden empfangenen String als gültiges UTF-8 prüfen, bevor Sie ihn speichern oder irgendwo verwenden. mb_check_encoding() PHP macht den Trick, aber Sie müssen es konsequent mb_check_encoding() . Es gibt wirklich keinen Ausweg, da bösartige Kunden Daten in beliebiger Kodierung übermitteln können.

    $string = $_REQUEST['user_comment'];
    if (!mb_check_encoding($string, 'UTF-8')) {
        // the string is not UTF-8, so re-encode it.
        $actualEncoding = mb_detect_encoding($string);
        $string = mb_convert_encoding($string, 'UTF-8', $actualEncoding);
    }
    
  • Wenn Sie HTML5 verwenden, können Sie diesen letzten Punkt ignorieren. Sie möchten, dass alle Daten, die von Browsern an Sie gesendet werden, UTF-8 enthalten. Der einzige zuverlässige Weg, dies zu tun, besteht darin, das Attribut " accept-charset zu allen Ihren <form> -Tags hinzuzufügen.

    <form action="somepage.php" accept-charset="UTF-8">
    

Ausgabe

  • Wenn Ihre Anwendung Text an andere Systeme überträgt, müssen sie auch über die Zeichenkodierung informiert werden. In PHP können Sie die Option default_charset in php.ini oder den Content-Type MIME-Header manuell ausgeben. Dies ist die bevorzugte Methode, wenn Sie auf moderne Browser zugreifen.

    header('Content-Type: text/html; charset=utf-8');
    
  • Wenn Sie die Antwortheader nicht festlegen können, können Sie auch die Codierung in einem HTML-Dokument mit HTML-Metadaten festlegen.

    • HTML5

      <meta charset="utf-8">
      
    • Ältere Versionen von HTML

      <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
      

Datenspeicherung und -zugriff

In diesem Thema wird speziell auf UTF-8 und Überlegungen zur Verwendung mit einer Datenbank eingegangen. Wenn Sie weitere Informationen zur Verwendung von Datenbanken in PHP wünschen, lesen Sie dieses Thema .

Daten in einer MySQL-Datenbank speichern:

  • utf8mb4 den utf8mb4 Zeichensatz für alle Tabellen und Textspalten in Ihrer Datenbank an. Dadurch werden in MySQL in UTF-8 nativ kodierte Werte physisch gespeichert und abgerufen.

    MySQL verwendet die utf8mb4 Codierung implizit, wenn eine utf8mb4_* angegeben wird (ohne expliziten Zeichensatz).

  • Ältere Versionen von MySQL (<5.5.3) unterstützen utf8mb4 nicht. utf8mb4 Sie utf8 , das nur eine Teilmenge von Unicode-Zeichen unterstützt.

Zugriff auf Daten in einer MySQL-Datenbank:

  • In Ihrem Anwendungscode (z. B. PHP) müssen Sie bei der von Ihnen verwendeten DB-Zugriffsmethode den Verbindungszeichensatz auf utf8mb4 . Auf diese Weise führt MySQL keine Konvertierung vom nativen UTF-8 durch, wenn Daten an Ihre Anwendung übergeben werden und umgekehrt.

  • Einige Treiber bieten einen eigenen Mechanismus zum Konfigurieren des Verbindungszeichensatzes, der sowohl den eigenen internen Status aktualisiert als auch MySQL über die Codierung informiert, die für die Verbindung verwendet werden soll. Dies ist normalerweise der bevorzugte Ansatz.

    Zum Beispiel (Die gleiche Überlegung bezüglich utf8mb4 / utf8 gilt wie oben):

    • Wenn Sie die PDO- Abstraktionsschicht mit PHP ≥ 5.3.6 verwenden, können Sie im DSN einen charset angeben:

      $handle = new PDO('mysql:charset=utf8mb4');
      
    • Wenn Sie mysqli verwenden , können Sie set_charset() aufrufen:

      $conn = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
      
      $conn->set_charset('utf8mb4');        // object oriented style
      mysqli_set_charset($conn, 'utf8mb4'); // procedural style
      
    • Wenn Sie mit einfachen stecken mysql aber passieren zu laufen PHP ≥ 5.2.3, können Sie rufen mysql_set_charset .

      $conn = mysql_connect('localhost', 'my_user', 'my_password');
      
      $conn->set_charset('utf8mb4');       // object oriented style
      mysql_set_charset($conn, 'utf8mb4'); // procedural style
      
    • Wenn der Datenbanktreiber keinen eigenen Mechanismus zum Festlegen des Verbindungszeichensatzes bereitstellt, müssen Sie MySQL möglicherweise eine Abfrage ausgeben, wie Ihre Anwendung die zu verschlüsselnden Daten der Verbindung erwartet: SET NAMES 'utf8mb4' .



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow