1

JAVAとPHPでアプリを開発しています。JAVA クラスから php ファイルを呼び出すと、php は ddbb でクエリを実行し、結果を返します。問題は、文字が正しく返されないことです。UTF-8 を使用したいのですが、php ファイルの先頭に次のように記述しています。しかし、うまくいきません。奇妙な文字を含む単語を直接入力してエコーすると、その単語は正しく表示されますが、ddbb から取得した場合は正しく表示されません。

関数 mb_internal_encoding は ISO-8859-1 を返しますが、utf-8 に設定しても機能しません

問題を正しく説明したかどうかわかりません。英語で申し訳ありません。

ありがとう

4

2 に答える 2

1

php 5.3.6+を使用している場合は、次の方法をお勧めします。

$pdo = new PDO("mysql:host=localhost;dbname=world;charset=utf8", 'my_user', 'my_pass');

その理由は、そうしないと、文字列のエスケープが適切に処理されないためです。phpはデフォルトでmysqlのプリペアドステートメントをエミュレートするため、これは重要です。したがって、適切な文字セットを識別できる内部real_escape_stringに大きく依存しています。を介して文字セットを"SET NAMES ..."設定しても、real_escape_stringで使用される内部文字セット設定は更新されません。

要約:上記の方法を使用しない場合、SQLインジェクション攻撃に対して脆弱になる可能性があります。それは最初と最後の文字セットに依存するので、私はそう言うかもしれません。

または、プリペアドステートメントをエミュレートしないようにpdoを設定できます。

参照: http ://www.php.net/manual/en/mysqlinfo.concepts.charset.php

于 2012-06-18T18:46:43.057 に答える
1

あなたのPDOでこれを試してください:

$dbInfos = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'");

$this->connection = new PDO($this->dsn, $this->username, $this->password, $dbInfos);
于 2012-06-18T17:34:32.413 に答える