0

テキストファイルからロードされた挿入コマンドの実行に問題があります。codeIgniter "file"ヘルパーを使用してSQL行をロードしてから、単純なdb-> query(content of my file)を実行します。問題は、SQLがファイルからロードされるときに、特殊文字が残りの文字列をトリミングすることです。

これが機能する例です

INSERT INTO test(test) VALUES("<p>There is <strong>no special character</strong> in this string</p>");

動作しない

INSERT INTO test(test) VALUES("<p>this character <em>é</em> is a <strong>special character</strong></p>");

2番目の例では、のみ"<p> this character <em>"が保存されます。phpMyAdminで同じ行を実行すると正常に動作するため、これは奇妙です。

なぜこれが起こるのか誰もが知っていますか?または私が間違っていることは何ですか?

ありがとう


これが簡単な「再現手順」です。

シンプルなテーブル:

CREATE TABLE `test` (
`test` TEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
) ENGINE = InnoDB;

以下を含むファイル「application/view /text.txt」:

INSERT INTO test(test) VALUES("<p>this character <em>é</em> is a <strong>special character</strong></p>");

挿入を実行するために使用するコード

$this->load->helper('file');
$loaded_sql = read_file(BASEPATH . "../application/views/test.txt");
$this->db->query($loaded_sql);

私のデータベース構成

$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';

CI構成

$config['charset'] = 'UTF-8';
4

2 に答える 2

2

やっと手に入れました。特殊文字が正しくエンコードされているかどうかを確認するために、ファイルを読み取るときに「utf8_encode()」を使用する必要がありました。テキスト ファイルは ANSI (デフォルトのメモ帳エンコーディング) でエンコードする必要があります。ファイルが UTF-8 または UNICODE の場合、機能しません!

問題を解決したコード:

$loaded_sql = utf8_encode( read_file(BASEPATH . "../application/views/test.txt") );
于 2012-05-29T15:32:49.687 に答える
1

テーブルにレコードを挿入する前に使用してみてください。

$this->db->db_set_charset('latin1', 'latin1_swedish_ci');

テーブルとテーブルの列に同じ設定があることを確認してください。

于 2012-08-24T09:12:07.157 に答える