MySQL und PHP: UTF-8 mit kyrillischen Zeichen [duplicate]

Lesezeit: 4 Minuten

MySQL und PHP UTF 8 mit kyrillischen Zeichen duplicate
Arriba

Ich versuche, einen kyrillischen Wert in die MySQL-Tabelle einzufügen, aber es gibt ein Problem mit der Codierung.

PHP:

<?php

$servername = "localhost";
$username = "a";
$password = "b";
$dbname = "c";

$conn = new mysqli($servername, $username, $password, $dbname);

mysql_query("SET NAMES 'utf8';"); 
mysql_query("SET CHARACTER SET 'utf8';"); 
mysql_query("SET SESSION collation_connection = 'utf8_general_ci';"); 

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "UPDATE  `c`.`mainp` SET  `search` =  'test тест' WHERE  `mainp`.`id` =1;";

if ($conn->query($sql) === TRUE) {   
}
$conn->close();

?>

MySQL:

| id |    search   |            
| 1  |   test ав |

Hinweis: PHP-Datei ist utf-8Datenbankabgleich utf8_general_ci

  • Sie müssen aufhören zu verwenden mysql_query() — PHPs mysql_xxx() Funktionen wurden ersetzt: Sie sollten entweder die verwenden mysqli oder PDO Bibliotheken statt. Beide sollten es einfacher machen, mit solchen Dingen zu arbeiten.

    – Spudley

    8. August 2015 um 20:07 Uhr

  • Sollte auch für Sie die Lösung sein stackoverflow.com/questions/25286279/…

    – Narr

    8. August 2015 um 20:21 Uhr


FILTER SANITIZE vs FILTER VALIDATE was ist der Unterschied und
Qirel

Sie mischen hier APIs, mysql_* und mysqli_* mischt sich nicht. Du solltest dabei bleiben mysqli_ (wie es scheint, sind Sie sowieso), als mysql_* Funktionen sind veraltet und wurden in PHP7 vollständig entfernt.

Ihr eigentliches Problem ist irgendwo ein Zeichensatzproblem. Hier sind ein paar Hinweise, die Ihnen helfen können, den richtigen Zeichensatz für Ihre Anwendung zu finden. Dies deckt die meisten der allgemeinen Probleme, mit denen man bei der Entwicklung einer PHP/MySQL-Anwendung konfrontiert werden kann.

  • ALLE -Attribute in Ihrer gesamten Anwendung müssen auf UTF-8 festgelegt sein
  • Speichern Sie das Dokument als UTF-8 ohne BOM (Wenn Sie Notepad++ verwenden, ist es Format -> Convert to UTF-8 w/o BOM)
  • Der Header in PHP und HTML sollte auf UTF-8 gesetzt sein

    • HTML (Innerhalb <head></head> Stichworte):

      <meta charset="UTF-8">
      
    • PHP (am Anfang Ihrer Datei, vor jeder Ausgabe):

      header('Content-Type: text/html; charset=utf-8');
      
  • Stellen Sie beim Verbinden mit der Datenbank den Zeichensatz für Ihr Verbindungsobjekt auf UTF-8, wie hier (direkt nach dem Verbinden)

    mysqli_set_charset($conn, "utf8"); /* Procedural approach */
    $conn->set_charset("utf8");        /* Object-oriented approach */
    

    Das ist für mysqli_*es gibt ähnliche für mysql_* und PDO (siehe unten in dieser Antwort).

  • Stellen Sie außerdem sicher, dass Ihre Datenbank und Tabellen auf UTF-8 eingestellt sind, das können Sie folgendermaßen tun:

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    

    (Alle bereits gespeicherten Daten werden nicht in den richtigen Zeichensatz konvertiert, daher müssen Sie dies mit einer sauberen Datenbank tun oder die Daten danach aktualisieren, wenn fehlerhafte Zeichen vorhanden sind).

  • Wenn Sie verwenden json_encode()müssen Sie möglicherweise die anwenden JSON_UNESCAPED_UNICODE Flag, andernfalls werden Sonderzeichen in ihre hexadezimale Entsprechung konvertiert.

Erinnere dich daran ALLES in Ihrer gesamten Codepipeline muss auf UFT-8 festgelegt werden, da Sie sonst möglicherweise fehlerhafte Zeichen in Ihrer Anwendung feststellen.

Zusätzlich zu dieser Liste kann es Funktionen geben, die einen bestimmten Parameter zur Angabe eines Zeichensatzes haben. Das Handbuch wird Sie darüber informieren (ein Beispiel ist htmlspecialchars()).

Es gibt auch spezielle Funktionen für Multibyte-Zeichen, Beispiel: strtolower() wird keine Multibyte-Zeichen senken, dafür müssen Sie verwenden mb_strtolower()Sieh dir das an Live-Demo.

Anmerkung 1: Beachten Sie, dass es irgendwo als angegeben ist utf-8 (mit einem Bindestrich) und irgendwo als utf8 (ohne es). Es ist wichtig, dass Sie wissen, wann Sie welche verwenden, da sie normalerweise nicht austauschbar sind. Zum Beispiel HTML und PHP will utf-8aber MySQL nicht.

Anmerkung 2: In MySQL sind “Zeichensatz” und “Kollation” nicht dasselbe, siehe Unterschied zwischen Kodierung und Kollation?. Beide sollten jedoch auf utf-8 eingestellt sein; Im Allgemeinen sollte die Sortierung beides sein utf8_general_ci oder utf8_unicode_ci, siehe UTF-8: Allgemein? Behälter? Unicode?.

Notiz 3: Wenn Sie Emojis verwenden, muss MySQL mit einem angegeben werden utf8mb4 Zeichensatz anstelle des Standards utf8, sowohl in der Datenbank als auch in der Verbindung. HTML und PHP werden nur haben UTF-8.


UTF-8 einstellen mit mysql_ und PDO

  • PDO: Dies geschieht im DSN Ihres Objekts. Beachten Sie das charset Attribut,

    $pdo = new PDO("mysql:host=localhost;dbname=database;charset=utf8", "user", "pass");
    
  • mysql_: Dies ist sehr ähnlich wie getan mysqli_*aber es nimmt das Verbindungsobjekt nicht als erstes Argument.

    mysql_set_charset('utf8');
    

  • Das war die Antwort für mich: $conn->set_charset(“utf8”); Danke!!

    – nurp

    9. April 2016 um 11:43 Uhr


  • Charset kann jetzt mit gesetzt werden <meta charset="UTF-8"> auch im HTML

    – DarkBee

    9. März 2017 um 7:36 Uhr

Lösung:

mysql_query("SET NAMES 'utf8';"); > $mysqli->set_charset('utf8');

988690cookie-checkMySQL und PHP: UTF-8 mit kyrillischen Zeichen [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy