我正在使用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ş
我已经尝试在数据库中保存JohnTemirtaÅ,但它运行正常。所以我想我可能会utf8_encode($name)
将它保存在DB和utf8_decode中,然后再显示它。只是做后者将无法正常工作。您需要将mb_internal_encoding("UTF-8");
添加到PHP脚本的顶部。
如何正确编码数据以便插入数据?
感谢你们所有人帮助你们工作了什么!
感谢您的帮助。
答案 0 :(得分:1)
在运行插入查询之前,请先尝试运行以下查询:
mysql_query("SET NAMES 'utf8'");
并看看是否有帮助。
答案 1 :(得分:1)
你做的一切都还好。我来自土耳其,在我开发的每个项目中,我都在检查这些东西:
请勿更改codeigniter的“char_set”和“dbcollat”选项。
如果你这样做,应该没有问题。
答案 2 :(得分:1)
在将记录插入数据库之前尝试此操作。
$this->db->db_set_charset('latin1', 'latin1_swedish_ci');
// -> latin1- Charset &
// -> latin1_swedish_ci - Collation
确保在表格和表格列的DB中具有相同的设置。
答案 3 :(得分:0)
也许我不能完全回答你的要求,但我可以给出一些一般的提示,因为我使用utf-8自我。
尝试从某个客户端手动输入此字符(heidisql是免费的)。
当我使用GET时,事情效果不好但是使用htmlencode,htmlspecialchars ..使用这些函数它可以正常工作。
后来我只使用POST,所以不需要编码,我已经实现了utf-8自动完成工作正常。
我觉得在插入之前尝试编码和var_dump sql是值得的,以确保输入的内容。
在一些复杂的情况下,存储在变量中的引号对我来说非常方便,例如:
$ DBQ = “\”“; $ sql = $ dbq .'some sql'。 $ DBQ;
我使用PHP PDO,到目前为止从未遇到过utf-8的问题。希望这对你有所帮助!
我忘了..你说codeIgniter ..手工输入一个值会保证你至少在哪里聚焦,数据库或框架(幸运的是我使用我的mvc)。只是尝试深入了解mvc代码,看看在插入之前sql是什么样的。