codeigniter insert:特殊字符修剪我的字符串值

时间:2012-05-29 02:35:14

标签: database codeigniter character-encoding insert

我在执行从文本文件加载的插入命令时遇到问题。我使用codeIgniter“file”帮助程序加载sql行,然后执行一个简单的db->查询(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>");

在第二个示例中,仅保存"<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';

2 个答案:

答案 0 :(得分:2)

我终于明白了。在读取文件时需要使用“utf8_encode()”以确保特殊字符被正确编码。文本文件必须以ANSI编码(默认记事本编码)。如果文件是UTF-8或UNICODE,它将无法工作!

解决问题的代码:

$loaded_sql = utf8_encode( read_file(BASEPATH . "../application/views/test.txt") );

答案 1 :(得分:1)

在表中插入记录之前尝试使用。

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

确保您在表格和表格中具有相同的设置表格列。