0

サーバーとして機能するFedoraマシンがあり、Apacheがphp 5.3を実行しています

スクリプトは、「メッセージ」を送信するさまざまなソースのエントリ ページとして機能します。

php スクリプトは次serverAddress/phpScript.php?message=MyMessageのように呼び出されます。メッセージは PDO 経由で保存され、SqlServer 2008 db に接続されます。

メッセージに üäöß のような特殊文字 (ドイツ語など) が含まれている場合、db では正しい文字列ではなく意味不明な文字列が表示されます: ã¼ã¤ã¶ãŸ

データベースはUTF-8に完全に対応しています-他のツールを使用しても問題なくドイツ語の文字を接続して送信/取得できます(php経由ではありません)。

PHPスクリプト内:

  • 入力文字列をエコーすると、正しい文字列üäößが得られます
  • ファイルに保存すると(入力をログに記録します)、意味不明な内容が表示されます:üã¤ã¶ÃŸ

この動作の原因は何ですか? どうすれば修正できますか?

  • マルチバイトが有効になっている (yum install php-mbstring に続いて apache の再起動)

  • 私が持っている私のPHPスクリプトの開始時に:

    mb_internal_encoding('UTF-8');
    mb_http_output('UTF-8');
    mb_http_input('UTF-8');
    mb_language('uni');
    mb_regex_encoding('UTF-8');
    ob_start('mb_output_handler');
  • PDO経由でmssqlを扱うときのデフォルトのエンコーディングタイプはUTF-8であると私が理解していることから

新規開発:

同僚がPDO_DBLIB ページ(現時点ではキャッシュからのみ表示)を教えてくれました。$res->bindValue(':value', iconv('UTF-8', 'ISO8859-1', $value);

私はすべてを置き換え $res->bindParam(':text',$text);$res->bindParam(':text',iconv('UTF-8', 'ISO8859-1',$text));すべてが機能しました:)。

mb_internal_encoding.... および他のすべての行は不要になりました。

ISO8859-1 エンコーディングを使用すると機能するのはなぜですか?

4

2 に答える 2

2
于 2012-09-14T15:31:21.307 に答える
0

この記事「Web アプリでの Unicode フロントツーバックの処理」をご覧ください。この件に関して私がこれまでに見た中で最高の記事の 1 つです。ガイドに従っても問題が解決しない場合は、それがあなたのせいではないことを確信しています.

于 2012-09-14T14:28:10.940 に答える