ホームページ >バックエンド開発 >PHPチュートリアル >PHP で中国語 SQL サーバーを保存すると文字化けが発生する 2008_PHP チュートリアル
この記事では、中国語 SQL Server 2008 を保存するときに PHP で文字化けが発生する問題を解決するためによく使用される方法をいくつかまとめています。同様の問題に遭遇した友人は、この記事を参照してください。
今日、PHP を使用してデータベースを操作したところ、SQL Server 2008 データベースに挿入された中国語フィールドが文字化けしていることがわかりました。私の最初の状況をいくつか示します。
開発環境はphp5.3.3+Apache2.2.17+SQL Server 2008、phpスクリプトファイルのエンコーディングはutf-8、データベースに渡すエンコーディングはGB2312(SQL Serverのデフォルトの文字エンコーディングはこれかもしれません、よくわかりません)、データベースへの接続には Microsoft が公式に提供する SQLSRV ライブラリが使用されます (追記: SQL Server 2005 では、mssql.dll による接続はサポートされなくなりました)。そのため、sqlsrv_query($conn, "set names GB2312") ; ステートメントは転送を設定するために使用されます。データベースのエンコード形式の場合、SQL ステートメントは次のように記述されます: insert into Opinion (content) 値 ('aaa Chinese content');
この SQL ステートメントを実行すると、実行が失敗したことがわかります。sqlsrv_errors() 関数を使用してエラー メッセージを出力し、次の結果を取得します。
コードをコピー | |
コードをコピー | |
|
コードは次のとおりです
Array ( [0] => Array ( [0] => 42S22 [SQLSTATE] => 42S22 [1] => 207 [コード] => 207 [2] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ��Ч�� [メッセージ] => [Microsoft][SQL Server Native Client 10.0][SQL Server]� � �� 'ああ����������' ��Ч�� ) ) | |
このエラー メッセージについては手がかりがありません。SQL ステートメントが間違って記述されているかどうかを確認するために、SQL ステートメントを Web ページに出力しました。出力結果は次のとおりです。 |
コードは次のとおりです
意見(内容)の値に挿入(aaa��������) | |||||||
コードは次のとおりです | コードをコピー |
$sql = "意見 (コンテンツ) 値に挿入 ( '".$string."')"; ズームインしてはっきりと見てみましょう |
SQL ステートメントが正常に実行され、データベースに保存された中国語が文字化けしないように、$string を一重引用符で囲みます。
他のソリューションを参照してください
データベースのエンコードが GB2312 の場合、ページ上のデータが正常に表示され、データベース内のデータが文字化けしないように Yii で設定する方法:
方法 1:
1. Yii のデフォルトのエンコード方式は utf-8 です。エンコード方式を変更したい場合は、main.php ファイルに 'charset'=>'GB2312' を追加する必要があります。関数の出力
2. SQL Server 2000のエンコード方式はデフォルトでローカルのGB2312エンコード方式になっていますので、データベースを操作する際はエンコード方式に注意してください
。
3. Web ページのエンコーディングを GB2312 に変更する必要があります
4. ファイルを保存するときは、php ファイル内の中国語の文字を正常に解析できるように、GB2312 エンコードとして保存する必要があります
方法 2:
1. iconv 関数を使用してデータをトランスコードします
コードは次のとおりです | コードをコピー |
iconv('GB2312','UTF-8',$data) |