2

我正在使用 PHP Codeigniter 编写一个 Web 应用程序。我收到可以是任何语言的输入,并将其保存在我的数据库中。

MYSQL DB 排序规则设置为 utf8_unicode_ci。对于 database.php 中的 codeigniter,我设置了这个:

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

当我在我的数据库上运行以下插入时:

insert into user (name,id) values ('John Temirtaş', 2)

我收到此错误:

不正确的字符串值:第 1 行的列 'name' 的 '\xC5\x9F'

s 有问题。它是一个土耳其字符。

到目前为止,我在调试时尝试过这个

print_r($name)
John Temirtaş

print_r("Encoded Name: ".utf8_encode($name))
Encoded Name: John TemirtaÅ

print_r("Decoded Name".utf8_decode($name)
Encoded Name: John Temirta?

print_r("Decoded-Encode Name: ".utf8_decode(utf8_encode($name)))
Decoded-Encode Name: John Temirtaş

我曾尝试将 John TemirtaÅ 保存在数据库中,并且效果很好。因此,我想我可能会utf8_encode($name)在将其保存在数据库中之前将其保存在 utf8_decode 中,然后再显示它。只做后者是行不通的。您需要添加mb_internal_encoding("UTF-8");到您的 php 脚本的顶部。

如何正确编码数据以便插入?


谢谢大家的帮助,这是有效的!

  1. 打开 MySql 工作台。设置用户表的字符编码和排序规则。字符集:utf-8 排序规则:utf8_unicode_ci
  2. name列的排序规则设置为utf8_unicode_ci。完毕。插入应该可以工作。

谢谢你的帮助。

4

4 回答 4

1

你做的一切都很好。我来自土耳其,在我开发的每个项目中,我都会检查以下内容:

  • 我的php 文件是否使用UTF8 编码保存?
  • 我的表格及其字段是否与utf8_unicode_ci进行了整理

不要更改 codeigniter 的“char_set”“dbcollat​​”选项。

如果你这样做,应该没有问题。

于 2011-05-23T07:12:13.130 回答
1

在数据库中插入记录之前试试这个。

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

// -> latin1- Charset & 
// -> latin1_swedish_ci - Collation

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

于 2012-08-24T08:47:32.173 回答
1

在运行插入查询之前,请先尝试运行以下查询:

mysql_query("SET NAMES 'utf8'");

看看是否有帮助。

于 2011-05-22T17:22:47.783 回答
0

也许我不能完全回答你的问题,但我可以给出一些一般性的提示,因为我自己使用的是 utf-8。

  1. 尝试从某个客户端手动输入此字符(heidisql 是免费的)。

  2. 当我使用 GET 时,事情并没有很好地工作,但是使用 htmlencode、htmlspecialchars .. 使用这样的功能它可以正常工作。

  3. 后来我只使用 POST,因此不需要编码,并且我实现了一个 utf-8 自动完成功能,效果很好。

我认为在插入之前尝试编码和 var_dump sql 是值得的,以确保输入的内容。

  1. 在一些复杂的情况下,存储在变量中的引号对我来说非常方便,例如:

    $dbq="\""; $sql=$dbq .'一些 sql '. $dbq;

我使用 PHP PDO,到目前为止从未遇到过 utf-8 的问题。希望这对您有所帮助!

我忘了..你说codeIgniter ..手动输入一个值至少可以确保你关注哪里,数据库或框架(幸运的是我使用我的mvc)。试着深入了解 mvc 代码,看看插入之前的 sql 是什么样子。

于 2011-05-21T22:26:03.400 回答