ホームページ  >  記事  >  バックエンド開発  >  sqlserver 2008_PHP チュートリアルに中国語を挿入すると文字化けする解決策を共有する

sqlserver 2008_PHP チュートリアルに中国語を挿入すると文字化けする解決策を共有する

WBOY
WBOYオリジナル
2016-07-21 15:17:511040ブラウズ

今日、PHP を使用してデータベースを操作したところ、SQL Server 2008 データベースに挿入された中国語フィールドが文字化けしていることに気付きました。以下に私の初期状況をいくつか示します。

開発環境は php5.3.3+Apache2.2.17+SQL です。 Server 2008、PHPスクリプトファイルのエンコーディングはutf-8、データベースに渡されるエンコーディングはGB2312です(SQL Serverのデフォルトの文字エンコーディングはこれである可能性がありますが、私は公式に提供しているSQLSRVライブラリを使用しています)。 Microsoft はデータベースに接続します (追記: SQL Server 2005 以降、mssql.dll を使用した接続はサポートされなくなりました)。そのため、sqlsrv_query($conn, "set names GB2312") ステートメントを使用して、渡されるエンコード形式を設定します。 SQL ステートメントは次のように記述されます: insert into Opinion (content) names ('aaa Chinese content');

この SQL ステートメントを実行し、sqlsrv_errors() 関数を使用して実行が失敗したことを確認します。エラー メッセージが表示され、次の結果が得られます:

コードをコピーします コードは次のとおりです:

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

コードをコピーします。 コードは次のとおりです。 $string = iconv(' utf-8', 'GB2312 //IGNORE', 'aaa Chinese content');
$sql = "opinion (content) 値 ($string) に挿入"
[code]
このとき、別のエラーが発生しました。が報告された場合、エラー メッセージは次のとおりです:
[code]
Array ( [0] => Array ( [0] => 42S22 [SQLSTATE] => 42S22 [1] => 207 [code] = > 207 [2] => [Microsoft][SQL Server Native Client 10.0][SQL Server]���� 'aaa��������' ��Ч�� [メッセージ] Microsoft][SQL Server Native Client 10.0][SQL Server]�� �� 'aaa��������' ��Ч�� ) )


このエラーメッセージについては手がかりがないので出力しましたSQL ステートメントを Web ページに送信して、SQL ステートメントが間違って記述されているかどうかを確認すると、出力結果は次のようになります:


コードをコピーします
コードは次のとおりです: Opinion (コンテンツ) 値に挿入します。 (aaa��������)

一見問題ないようですが、実は問題があります 問題は、最後の括弧内のパラメータを囲む必要があることに気づきました(文字列であることを示す) 引用符で囲まれているので、SQL ステートメントを再度変更しました。コードは次のとおりです:


コードをコピー
コードは次のとおりです: $sql = "insert into意見 (コンテンツ) 値 ( '".$string."')"; 明確に見るために、拡大してみます


$string を一重引用符で囲み、後で SQL ステートメントを実行できるようにします 成功、データベースに保存されている漢字は文字化けしません。


http://www.bkjia.com/PHPjc/325615.html

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/325615.html技術記事今日、php を使用してデータベースを操作したところ、SQL Server 2008 データベースに挿入された中国語フィールドが文字化けしていることがわかりました。 以下に、私の初期状況をいくつか示します。 開発環境は php5.3.3+Apache2.2.17 です...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。