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が表示されます。
アプリケーションは、データベースを読み取るときにエンコードを変換せず、データが異常に表示されました。
一貫したエンコードを確保することは、文字化けコードを回避するための鍵です。
使用しているデータベースが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;
?>
データベースの文字セットを確認<br> SQLステートメントを使用して、データベースとテーブルの文字セット構成を確認し、PHPスクリプトのデフォルトエンコードと一致するようにしてください。
統一されたエンコードおよび変換ツール<br> convert_cyr_stringはキリルのエンコード変換に焦点を当てていますが、 ICONVまたはMB_CONVERT_ENCODINGは、一般的なUTF-8およびその他のエンコード変換でより一般的です。
コンバージョン順序を合理的に配置します<br> 複雑なエンコーディング変換の場合、最初にICONVまたはMB_CONVERT_ENCODINGをメイン変換として使用し、 Convert_Cyr_Stringを使用して微調整することをお勧めします。
変換の処理に失敗しました<BR> コンバージョンを使用する場合は、無知な無効な文字フラグ( 「// Ingrore」など)を使用して、プログラムエラーを回避します。
データベース<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;
}
?>