<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Exemple de code pré-indépendant</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Initialiser l'environnement du programme...<br>"</span></span><span>;
</span><span><span class="hljs-variable">$version</span></span><span> = </span><span><span class="hljs-title function_ invoke__">phpversion</span></span><span>();
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"PHPVersion:"</span></span><span> . </span><span><span class="hljs-variable">$version</span></span><span> . </span><span><span class="hljs-string">"<br>"</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>
Lorsque vous utilisez l'extension MySQLI de PHP pour les opérations de base de données, les problèmes de jeu de caractères sont l'un des facteurs les plus probables pour provoquer des erreurs ou des erreurs dans l'écriture de données. MySQLI :: SET_CHARSET est la méthode officielle recommandée pour configurer le jeu de caractères de connexion de la base de données, mais vous devez toujours faire attention à certains détails après l'avoir configuré pour vous assurer que les données sont écrites correctement dans la base de données.
<span><span><span class="hljs-variable">$mysqli</span></span><span> = </span><span><span class="hljs-keyword">new</span></span><span> </span><span><span class="hljs-title function_ invoke__">mysqli</span></span><span>(</span><span><span class="hljs-string">"localhost"</span></span><span>, </span><span><span class="hljs-string">"username"</span></span><span>, </span><span><span class="hljs-string">"password"</span></span><span>, </span><span><span class="hljs-string">"database"</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_errno) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Échec de la connexion: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->connect_error);
}
</span><span><span class="hljs-comment">// Définissez le jeu de caractères sur utf8mb4</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">set_charset</span></span><span>(</span><span><span class="hljs-string">"utf8mb4"</span></span><span>)) {
</span><span><span class="hljs-keyword">die</span></span><span>(</span><span><span class="hljs-string">"Échec du jeu de caractères: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>->error);
}
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"Ensemble de jeux de caractères avec succès: "</span></span><span> . </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">character_set_name</span></span><span>();
</span></span>
Ici, UTF8MB4 est le jeu de caractères recommandé car il prend en charge un Unicode complet, y compris des caractères spéciaux tels que les emoji.
Même si le jeu de caractères de connexion est réglé correctement, Brizbled apparaîtra toujours si le jeu de caractères de la table ou du champ de la base de données est différent. Les jeux de caractères des listes de contrôle et des champs peuvent être interrogés via SQL:
<span><span><span class="hljs-keyword">SHOW</span></span><span> </span><span><span class="hljs-keyword">CREATE</span></span><span> </span><span><span class="hljs-keyword">TABLE</span></span><span> your_table;
</span></span>
Il est recommandé de définir le jeu de caractères de table et de champ sur UTF8MB4 uniformément:
<span><span><span class="hljs-keyword">ALTER</span></span><span> </span><span><span class="hljs-keyword">TABLE</span></span><span> your_table </span><span><span class="hljs-keyword">CONVERT</span></span><span> </span><span><span class="hljs-keyword">TO</span></span><span> </span><span><span class="hljs-type">CHARACTER</span></span><span> </span><span><span class="hljs-keyword">SET</span></span><span> utf8mb4 </span><span><span class="hljs-keyword">COLLATE</span></span><span> utf8mb4_unicode_ci;
</span></span>
L'épissage directement des chaînes SQL est sujette à des problèmes d'encodage de caractère ou à des risques d'injection SQL. Utilisez des instructions de prétraitement pour vous assurer que les données sont écrites dans le codage correct:
<span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$mysqli</span></span><span>-></span><span><span class="hljs-title function_ invoke__">prepare</span></span><span>(</span><span><span class="hljs-string">"INSERT INTO your_table (name, content) VALUES (?, ?)"</span></span><span>);
</span><span><span class="hljs-variable">$name</span></span><span> = </span><span><span class="hljs-string">"Tester l'utilisateur"</span></span><span>;
</span><span><span class="hljs-variable">$content</span></span><span> = </span><span><span class="hljs-string">"Voici quelques contenus qui contiennent des caractères spéciaux ??"</span></span><span>;
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">bind_param</span></span><span>(</span><span><span class="hljs-string">"ss"</span></span><span>, </span><span><span class="hljs-variable">$name</span></span><span>, </span><span><span class="hljs-variable">$content</span></span><span>);
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">execute</span></span><span>();
</span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">close</span></span><span>();
</span></span>
MySQLI traitera automatiquement les paramètres en fonction du jeu de caractères de connexion, réduisant ainsi le risque de caractères brouillés.
Le fichier PHP lui-même doit être enregistré en tant que UTF-8 sans bom.
La page HTML doit déclarer le jeu de caractères:
<span><span><span class="hljs-tag"><<span class="hljs-name">meta</span></span></span><span> </span><span><span class="hljs-attr">charset</span></span><span>=</span><span><span class="hljs-string">"UTF-8"</span></span><span>>
</span></span>
De cette façon, les données entrées par l'utilisateur, les chaînes traitées par PHP et le jeu de caractères écrit dans la base de données restent cohérents.
Définissez le jeu de caractères de connexion à l'aide de $ mysqli-> set_charset ("utf8mb4") .
Assurez-vous que les jeux de caractères de base de données, de table et de champ sont cohérents avec le jeu de caractères de connexion.
Essayez d'utiliser des instructions de prétraitement pour insérer des données.
Assurez-vous que les fichiers et pages PHP sont codés sous forme UTF-8.
Suivez ces étapes pour éviter les erreurs de caractère ou les codes brouillées lors de l'écriture de données dans la base de données dans la plus grande mesure.
Étiquettes associées:
mysqli