ホームページ >バックエンド開発 >PHPチュートリアル >PHP で中国語 SQL サーバーを保存すると文字化けが発生する 2008_PHP チュートリアル

PHP で中国語 SQL サーバーを保存すると文字化けが発生する 2008_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 10:46:43974ブラウズ

この記事では、中国語 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] => IMSSP [SQLSTATE] => IMSSP [1] => -46 [code] => -46 [2] => エラーが発生しましたクエリ文字列を UTF-16 に変換中: �Cast ; クエリ文字列を UTF-16 に変換中にエラーが発生しました: �Cast )
上記の文字化けをそのままコピーしてWebページに表示した結果です。 「クエリ文字列を UTF-16 に変換中にエラーが発生しました」から、文字エンコード変換の問題が原因であることがわかります。そこで、PHP の iconv 関数を使用して中国語のエンコード変換を強制し、SQL ステートメントを実行しました。コードは次のとおりです。

コードは次のとおりです$string = iconv('utf-8', 'GB2312//IGNORE', 'aaa 中国語コンテンツ'); $sql = "意見 (コンテンツ) 値 ($string) に挿入";この時点で、別のエラーが報告されました。エラー メッセージは次のとおりです。
コードをコピー

コードは次のとおりですコードをコピー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 ページに出力しました。出力結果は次のとおりです。

コードは次のとおりです

コードをコピー

一見問題がないように見えましたが、実は後ろの括弧内のパラメータを引用符で囲む必要があることに気づきました(文字列であることを示します)ので、SQL文を修正しました。コードは次のとおりです:

意見(内容)の値に挿入(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)

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/632931.html技術記事この記事では、PHP で中国語 SQL Server 2008 を保存するときに文字化けする問題を解決するためによく使用される方法をいくつかまとめています。同様の問題に遭遇した友人は、この記事を参照してください。 今日phpを使ってデータベースを操作していたら...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。