convert_cyr_string est fonction de PHP qui convertit les chaînes entre plusieurs encodages de lettres cyrilliques (tels que KOI8-R, Windows-1251, ISO-8859-5, etc.). Le prototype de fonction est le suivant:
string convert_cyr_string(string $str, string $from, string $to);
$ str : La chaîne à convertir
$ de : le type de codage de la chaîne actuelle
$ à : Type d'encodage cible
Les identificateurs de codage pris en charge comprennent:
K - Koi8-R
W - Windows-1251
I - ISO-8859-5
A - CP866
Si les paramètres du jeu de caractères de la base de données ne sont pas uniformes, ou si PHP n'est pas adapté lors de la lecture et de l'écriture, cela rendra les données stockées incompatibles avec les données réelles affichées, entraînant des problèmes de code brouillé. Par exemple:
La base de données est codée par UTF8 , mais l'application utilise Windows-1251 lors de l'écriture et le code brouillé apparaîtra.
L'application n'a pas converti le codage lors de la lecture de la base de données, ce qui a fait afficher les données anormalement.
Assurer un encodage cohérent est la clé pour éviter le code brouillé.
En supposant que la base de données que vous utilisez consiste à stocker des données de caractères cyrilliques dans le codage de Windows-1251 et des chaînes de processus PHP dans le codage UTF-8 par défaut, vous pouvez utiliser convert_cyr_string pour le codage de la conversion pour vous assurer que les données sont formatées correctement lorsqu'elles sont écrites et lues.
<?php
// original UTF-8 Chaîne
$utf8_string = "Пример строки на русском";
// Volonté UTF-8 Se convertir Windows-1251,Préparez-vous à écrire dans la base de données
// Utiliser d'abord iconv Convertir UTF-8 arriver Windows-1251,Utiliser à nouveau convert_cyr_string Ajuster l'encodage
$win1251_string = convert_cyr_string(iconv("UTF-8", "Windows-1251//IGNORE", $utf8_string), 'w', 'w');
// Opération d'écriture de base de données
// Supposer qu'il a été établi PDO connecter $pdo
$sql = "INSERT INTO example_table (text_column) VALUES (:text)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':text', $win1251_string);
$stmt->execute();
?>
<?php
// depuis数据库读取Chaîne,Supposer que Windows-1251 codage
$sql = "SELECT text_column FROM example_table WHERE id = 1";
$stmt = $pdo->query($sql);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
// utiliser convert_cyr_string Convertir为 UTF-8,Affichage frontal pratique
$win1251_string = $row['text_column'];
$utf8_string = iconv("Windows-1251", "UTF-8//IGNORE", convert_cyr_string($win1251_string, 'w', 'w'));
echo $utf8_string;
?>
Confirmer le jeu de caractères de la base de données <br> Utilisez des instructions SQL pour confirmer la configuration du jeu de caractères de la base de données et des tables, et essayez de vous assurer qu'elle est cohérente avec le codage par défaut du script PHP.
Outil de codage et de conversion unifié <br> Bien que convert_cyr_string se concentre sur la conversion de codage cyrillique, iconv ou mb_convert_encoding est plus général pour General UTF-8 et d'autres conversions de codage.
Organiser l'ordre de conversion raisonnablement <br> Pour la conversion de codage complexe, il est recommandé d'utiliser iconv ou mb_convert_encoding comme conversion principale, puis utilisez d'abord convert_cyr_string en amende.
Le traitement de la conversion a échoué <br> Lorsque vous utilisez la conversion, utilisez l'indicateur de caractère non valide ignorant (tel que "// ignorer" ) pour éviter l'erreur du programme.
Spécifiez le jeu de caractères lors de la connexion à la base de données <br> Pour MySQL, il est recommandé d'inclure des paramètres de jeu de caractères lors de la connexion, tels que charset = CP1251 pour éviter la confusion causée par la conversion automatique pendant la lecture.
convert_cyr_string est un outil simple et efficace lorsqu'il s'agit de conversions de codage cyrilliques spécifiques, mais une gamme plus large de tâches de conversion de codage est plus appropriée pour s'appuyer sur les extensions ICONV et MBSTring . Ce n'est qu'en combinant raisonnablement ces outils et en définissant le jeu de caractères de la base de données que nous pouvons fondamentalement garantir que le codage est cohérent lors de la lecture et de la rédaction de la base de données, d'empêcher le code brouillé et d'améliorer la stabilité du système.
Gardez le codage cohérent, les données seront naturellement claires et correctes, et l'expérience utilisateur sera améliorée en conséquence.
<?php
// Exemple:depuisUTF-8ConvertirarriverWindows-1251Écrivez dans la base de données,再读取Convertir回UTF-8
function saveStringToDb(PDO $pdo, string $utf8_string) {
// Transcoding:UTF-8 -> Windows-1251
$win1251_string = iconv("UTF-8", "Windows-1251//IGNORE", $utf8_string);
$win1251_string = convert_cyr_string($win1251_string, 'w', 'w');
$sql = "INSERT INTO example_table (text_column) VALUES (:text)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':text', $win1251_string);
$stmt->execute();
}
function getStringFromDb(PDO $pdo, int $id): string {
$sql = "SELECT text_column FROM example_table WHERE id = :id";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
if (!$row) {
return '';
}
$win1251_string = $row['text_column'];
// Transcoding:Windows-1251 -> UTF-8
$utf8_string = iconv("Windows-1251", "UTF-8//IGNORE", convert_cyr_string($win1251_string, 'w', 'w'));
return $utf8_string;
}
?>