MySQL et PHP: UTF-8 avec les caractères Cyrilliques
J'essaie d'insérer une Cyrillique valeur dans la table MySQL, mais il y a un problème avec l'encodage.
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 ав |
Remarque: le fichier PHP est utf-8
, classement de base de données utf8_general_ci
Vous devez cesser d'utiliser
Devrait être le correctif pour vous stackoverflow.com/questions/25286279/...
mysql_query()
-- PHP mysql_xxx()
fonctions ont été remplacés: vous devez utiliser l' mysqli
ou PDO
bibliothèques de la place. Deux d'entre eux devraient faire ce genre de chose plus facile de travailler avec.Devrait être le correctif pour vous stackoverflow.com/questions/25286279/...
OriginalL'auteur Arriba | 2015-08-08
Vous devez vous connecter pour publier un commentaire.
Votre problème est un problème de charset quelque part. Voici quelques conseils qui peuvent vous aider à obtenir le bon jeu de caractères pour votre application. Ce couvre plus de la générale des problèmes que l'on peut rencontrer lors de l'élaboration d'un PHP/MySQL application.
Format
->Convert to UTF-8 w/o BOM
)L'en-tête en PHP et en HTML doit être mis en UTF-8
HTML (à l'intérieur de
<head></head>
tags):PHP (en haut de votre fichier, avant toute sortie):
Lors de la connexion à la base de données, définir le jeu de caractères UTF-8 pour votre connexion de l'objet, comme cela (directement après la connexion)
C'est pour
mysqli_*
, il y a ceux pourmysql_*
et PDO (voir en bas de cette réponse).Aussi assurez-vous que votre base de données et les tables sont mises en UTF-8, vous pouvez le faire comme ceci:
(Toutes les données déjà stockées ne seront pas convertis pour le bon jeu de caractères, de sorte que vous aurez besoin de faire cela avec un nettoyage de la base de données, ou de mettre à jour les données après avoir fait cela, si il n'y sont cassé les caractères).
json_encode()
, vous pourriez avoir besoin pour appliquer laJSON_UNESCAPED_UNICODE
drapeau, sinon, il vous permet de convertir les caractères spéciaux en leur équivalent hexadécimal.Rappelez-vous que TOUT dans l'ensemble de votre pipeline de code doit être mis à UFT-8, sinon, vous risquez de rencontrer cassé caractères dans votre application.
En plus de cette liste, il peut y avoir des fonctions qui a un paramètre permettant de spécifier un jeu de caractères. Le manuel va vous parler de cette (un exemple est
htmlspecialchars()
).Il existe également des fonctions pour les caractères multioctets, exemple:
strtolower()
ne sera pas inférieur caractères multioctets, pour cela vous devrez utilisermb_strtolower()
, voir ce démo.Réglage de l'UTF-8 avec
mysql_
et PDOPDO: Ce qui est fait dans la source de données de votre objet. Remarque le
charset
attribut,mysql_
: Cela se fait très similaire àmysqli_*
, mais il ne prend pas la connexion de l'objet en tant que premier argument.Charset pouvez maintenant définir avec
<meta charset="UTF-8">
ainsi dans le code HTMLOriginalL'auteur Qirel
Solution:
mysql_query("SET NAMES 'utf8';");
>$mysqli->set_charset('utf8');
OriginalL'auteur Arriba