現在の位置: ホーム> 最新記事一覧> convert_cyr_stringを使用して、データベースの読み取り、書き込み、エンコードを統合します

convert_cyr_stringを使用して、データベースの読み取り、書き込み、エンコードを統合します

gitbox 2025-05-29

convert_cyr_string関数とは何ですか?

convert_cyr_stringは、いくつかのキリル文字のエンコーディング(KOI8-R、Windows-1251、ISO-8859-5など)の間に文字列を変換するPHPの関数です。関数プロトタイプは次のとおりです。

 string convert_cyr_string(string $str, string $from, string $to);
  • $ str :変換する文字列

  • $ from :現在の文字列のエンコーディングタイプ

  • $ to :ターゲットエンコーディングタイプ

サポートされているエンコード識別子には次のものがあります。

  • K - Koi8-r

  • W - Windows-1251

  • I - ISO-8859-5

  • A - CP866

なぜデータベース操作は、変換のエンコードに集中する必要があるのですか?

データベースの文字セット設定が均一でない場合、または読み書き中にPHPが適応していない場合、保存されたデータが実際に表示されたデータと矛盾しているため、コードの問題が発生します。例えば:

  • データベースはUTF8によってエンコードされていますが、アプリケーションは書き込み時にWindows-1251を使用し、Carled Codeが表示されます。

  • アプリケーションは、データベースを読み取るときにエンコードを変換せず、データが異常に表示されました。

一貫したエンコードを確保することは、文字化けコードを回避するための鍵です。

convert_cyr_stringを使用したシナリオの例

使用しているデータベースがWindows-1251エンコーディングにキリル文字データを保存していると仮定すると、デフォルトではUTF-8エンコードでPHPスクリプトを処理すると、 convert_cyr_stringを使用して、書き込みと読み取り時にデータが正しくフォーマットされることを確認できます。

データベースに書き込む前にエンコード

<?php
// オリジナル UTF-8 弦
$utf8_string = "Пример строки на русском";

// 意思 UTF-8 に変換します Windows-1251,データベースに書き込む準備をします
// 最初に使用します iconv 変換する UTF-8 到着 Windows-1251,もう一度使用してください convert_cyr_string エンコーディングを調整します
$win1251_string = convert_cyr_string(iconv("UTF-8", "Windows-1251//IGNORE", $utf8_string), 'w', 'w');

// データベース書き込み操作
// 確立されていると仮定します PDO 接続する $pdo
$sql = "INSERT INTO example_table (text_column) VALUES (:text)";
$stmt = $pdo->prepare($sql);
$stmt->bindParam(':text', $win1251_string);
$stmt->execute();
?>

データベースを読み取った後のエンコードと変換

<?php
// から数据库读取弦,それを想定してください Windows-1251 コーディング
$sql = "SELECT text_column FROM example_table WHERE id = 1";
$stmt = $pdo->query($sql);
$row = $stmt->fetch(PDO::FETCH_ASSOC);

// 使用 convert_cyr_string 変換する为 UTF-8,便利なフロントエンドディスプレイ
$win1251_string = $row['text_column'];
$utf8_string = iconv("Windows-1251", "UTF-8//IGNORE", convert_cyr_string($win1251_string, 'w', 'w'));

echo $utf8_string;
?>

運用スキルの完全な分析

  1. データベースの文字セットを確認<br> SQLステートメントを使用して、データベースとテーブルの文字セット構成を確認し、PHPスクリプトのデフォルトエンコードと一致するようにしてください。

  2. 統一されたエンコードおよび変換ツール<br> convert_cyr_stringはキリルのエンコード変換に焦点を当てていますが、 ICONVまたはMB_CONVERT_ENCODINGは、一般的なUTF-8およびその他のエンコード変換でより一般的です。

  3. コンバージョン順序を合理的に配置します<br> 複雑なエンコーディング変換の場合、最初にICONVまたはMB_CONVERT_ENCODINGをメイン変換として使用し、 Convert_Cyr_Stringを使用して微調整することをお勧めします。

  4. 変換の処理に失敗しました<BR> コンバージョンを使用する場合は、無知な無効な文字フラグ( 「// Ingrore」など)を使用して、プログラムエラーを回避します。

  5. データベース<br>に接続するときに文字セットを指定します MySQLの場合、 CHARSET = CP1251などの接続時に文字セットパラメーターを含めることをお勧めします。

要約します

convert_cyr_stringは、特定のキリルエンコード変換を扱う際にシンプルで効果的なツールですが、 ICONVおよびmbstring拡張機能に依存するには、より広い範囲のエンコード変換タスクが適切です。これらのツールを合理的に組み合わせてデータベース文字セットを設定することによってのみ、データベースの読み取りと執筆中にエンコーディングが一貫していることを基本的に保証できます。

エンコーディングを一貫性に保ち、データは自然に明確で正しいものになり、それに応じてユーザーエクスペリエンスが改善されます。


 <?php
// 例:からUTF-8変換する到着Windows-1251データベースに書き込みます,再读取変換する回UTF-8
function saveStringToDb(PDO $pdo, string $utf8_string) {
    // トランスコーディング: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'];
    // トランスコーディング:Windows-1251 -> UTF-8
    $utf8_string = iconv("Windows-1251", "UTF-8//IGNORE", convert_cyr_string($win1251_string, 'w', 'w'));

    return $utf8_string;
}
?>