【问题标题】:Php code igniter save turkish characters to my sqlphp codeigniter将土耳其字符保存到mysql
【发布时间】:2011-05-21 21:32:03
【问题描述】:

我正在使用 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。只做后者是行不通的。您需要在 php 脚本的顶部添加 mb_internal_encoding("UTF-8");

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


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

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

感谢您的所有帮助。

【问题讨论】:

  • 确保您的插入查询的文件编码也是 UTF-8
  • @Anatoly 我添加了 mb_internal_encoding("UTF-8");在页面顶部,但它不起作用。
  • 我已将您的自我回答添加到您的问题中。以后,请通过编辑您的问题(查找“编辑”链接)添加任何相关信息,而不是将其作为答案或评论发布。祝你好运!
  • 以 UTF-8 编码保存您的 php 文件。您必须在编辑器中设置 php 文件的编码。例如:然后你在记事本中保存 php 文件,你必须在选项中选择 UTF-8 编码。
  • @Anatoly 我使用 Notepad++ 来编辑我的代码。你是说我应该在那里将我的php文件的编码设置为UTF-8。对不起,我可能误解了,为什么代码是依赖于编辑器的。

标签: php mysql codeigniter encoding turkish


【解决方案1】:

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

mysql_query("SET NAMES 'utf8'");

看看是否有帮助。

【讨论】:

    【解决方案2】:

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

    • 我的 php 文件是否使用 UTF8 编码保存?
    • 我的表及其字段是否与 utf8_unicode_ci

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

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

    【讨论】:

    • 我的“我的 php 文件是否使用 UTF8 编码保存?”是什么意思。我如何确保这一点?
    • 只需用记事本打开 php 文件。然后文件>另存为。确保文件名输入框下方的编码类型为utf8。默认情况下它应该是 ANSI。或者你可以使用记事本++。使用记事本++ 和编码> 转换为UTF8 打开文件。然后保存。
    【解决方案3】:

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

    $this->db->db_set_charset('latin1', 'latin1_swedish_ci');
    
    // -> latin1- Charset & 
    // -> latin1_swedish_ci - Collation
    

    确保您在 DB 中为表和表列设置相同的设置。

    【讨论】:

      【解决方案4】:

      也许我无法准确回答您的问题,但我可以提供一些一般性提示,因为我自己使用的是 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 是什么样子的。

      【讨论】:

        猜你喜欢
        • 2012-05-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多