Zoeken…


Opmerkingen

  • U moet ervoor zorgen dat u elke keer dat u een UTF-8-string verwerkt, dit veilig doet. Dit is helaas het moeilijkste gedeelte. U zult waarschijnlijk uitgebreid gebruik willen maken van de mbstring extensie van PHP.

  • PHP de ingebouwde string operaties zijn niet standaard UTF-8 safe. Er zijn enkele dingen die u veilig kunt doen met normale PHP-stringbewerkingen (zoals aaneenschakeling), maar voor de meeste dingen moet u de equivalente mbstring functie gebruiken.

Invoer

  • U moet elke ontvangen string verifiëren als geldige UTF-8 voordat u deze probeert op te slaan of ergens te gebruiken. PHP's mb_check_encoding() , maar je moet het consistent gebruiken. Dit kan echt niet worden omzeild, omdat kwaadwillende clients gegevens kunnen verzenden in elke gewenste codering.

    $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);
    }
    
  • Als u HTML5 gebruikt, kunt u dit laatste punt negeren. U wilt dat alle gegevens die browsers u sturen, zich in UTF-8 bevinden. De enige betrouwbare manier om dit te doen, is door het kenmerk accept-charset toe te voegen aan al uw <form> -tags:

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

uitgang

  • Als uw toepassing tekst naar andere systemen verzendt, moeten deze ook worden geïnformeerd over de tekencodering. In PHP kunt u de optie default_charset in php.ini of zelf de Content-Type MIME-header uitgeven. Dit is de voorkeursmethode bij het targeten van moderne browsers.

    header('Content-Type: text/html; charset=utf-8');
    
  • Als u de antwoordkoppen niet kunt instellen, kunt u de codering ook instellen in een HTML-document met HTML-metagegevens .

    • HTML5

      <meta charset="utf-8">
      
    • Oudere versies van HTML

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

Gegevensopslag en toegang

Dit onderwerp gaat specifiek over UTF-8 en overwegingen voor het gebruik ervan met een database. Als u meer informatie wilt over het gebruik van databases in PHP, bekijk dan dit onderwerp .

Gegevens opslaan in een MySQL-database:

  • Geef de utf8mb4 op voor alle tabellen en tekstkolommen in uw database. Dit maakt dat MySQL fysiek gecodeerde waarden in UTF-8 opslaat en ophaalt.

    MySQL zal impliciet utf8mb4 codering gebruiken als een utf8mb4_* is opgegeven (zonder expliciete tekenset).

  • Oudere versies van MySQL (<5.5.3) ondersteunen utf8mb4 dus u zult gedwongen moeten worden utf8 te gebruiken, dat alleen een subset van Unicode-tekens ondersteunt.

Toegang krijgen tot gegevens in een MySQL-database:

  • In uw toepassingscode (bijv. PHP), in welke DB-toegangsmethode u ook gebruikt, moet u de verbindingskarakteristiek instellen op utf8mb4 . Op deze manier kan MySQL geen conversie uitvoeren van de native UTF-8 wanneer het gegevens doorgeeft aan uw toepassing en vice versa.

  • Sommige stuurprogramma's bieden hun eigen mechanisme voor het configureren van de verbindingstekenset, die zowel zijn eigen interne status bijwerkt als MySQL informeert over de codering die voor de verbinding moet worden gebruikt. Dit is meestal de voorkeursbenadering.

    Bijvoorbeeld (dezelfde overweging met betrekking tot utf8mb4 / utf8 toepassing als hierboven):

    • Als u de BOB- abstractielaag gebruikt met PHP ≥ 5.3.6, kunt u charset opgeven in de DSN :

      $handle = new PDO('mysql:charset=utf8mb4');
      
    • Als u mysqli gebruikt , kunt u set_charset() aanroepen:

      $conn = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
      
      $conn->set_charset('utf8mb4');        // object oriented style
      mysqli_set_charset($conn, 'utf8mb4'); // procedural style
      
    • Als je vastzit aan gewone mysql maar toevallig PHP ≥ 5.2.3 draait, kun je mysql_set_charset bellen.

      $conn = mysql_connect('localhost', 'my_user', 'my_password');
      
      $conn->set_charset('utf8mb4');       // object oriented style
      mysql_set_charset($conn, 'utf8mb4'); // procedural style
      
    • Als het databasestuurprogramma geen eigen mechanisme biedt voor het instellen van de verbindingstekenset, moet u mogelijk een query uitvoeren om MySQL te vertellen hoe uw toepassing verwacht dat gegevens over de verbinding worden gecodeerd: SET NAMES 'utf8mb4' .



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow