2012-08-28 31 views
5

我正在使用/存储重音字符在数据库中的网站上工作。我有网页模板集,以便的config.php字符集变量的设置,如火柴:CodeIgniter配置字符集和UTF-8支持

<meta charset="<?php echo $this->config->item('charset');?>"> 

我遇到的问题是,当$config['charset']设置为UTF-8,形式验证失败,如果包含重音字符,就好像没有提交字符。因此,例如,如果字符串中包含任何字符,必需字段将反弹回来。字符串减去á工作正常。

我已经设法通过改变得到这个工作的$config['charset']ISO-8859-1和插入前将文本转换为UTF-8/PHP的utf8_encode()utf8_decode()从数据库中检索后。这是最好的方式还是我错过了一些需要的东西,以获得带有重音字符的UTF-8,在CodeIgniter中工作?

任何意见赞赏。

+0

确保你设置的是UTF-8。很难说出什么问题,但可能在某个时候你有不同的字符集。必须阅读:http://www.joelonsoftware.com/articles/Unicode.html。 – Styxxy

回答

12

您必须确保您在任何地方都使用UTF-8,并且PHP和MySQL都配置为处理UTF-8。

在HTML中,添加了元标记:

<meta charset="utf-8" /> 

并将其保存在UTF-8格式。这里是how to do that in notepad++

定义MySQL表支持UTF-8,创建表:

DEFAULT CHARSET=utf8; 

并设置为连接:在php.ini

mysql_set_charset('utf8', $con); 

Enable UTF-8

default_charset = "utf-8" 

全手动检查Handling Unicode Front To Back In A Web App

+0

非常感谢答案和链接 - 我会检查以确保UTF-8始终在使用中。表单验证问题是由$ config ['charset']设置被设置为'UTF-8'(全部为大写)而不是'utf-8'(全部为小写)引起的。出于某种原因,默认设置为大写'UTF-8'不起作用(至少不是我的设置)。 –

+0

很酷,很高兴帮助:) +1 – Kuf

+0

在google上发现它的人的小意见 - 此问题的替代来源可能是表_or column_的编码(是的,更改表的编码不会更改单个列的编码) - 在这种情况下,使用UTF-8字符串编辑列内的值会导致“错误的字符串值”警告,当您通过codeigniter运行查询时,该警告不可见。您只会看到?而不是UTF-8 char 。 – MarcinWolny