CodeIgniter配置字符集和UTF-8支持

5

我正在开发一个网站,该网站在数据库中使用/存储带有重音符号的字符。我已经将页面模板设置为与config.php字符集变量匹配,例如:

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

我遇到的问题是,当$config ['charset']设置为UTF-8 时,如果包含重音字符,则表单验证失败,好像没有任何字符提交一样。例如,如果字符串中包含á,则必填字段将反弹回来。去掉á的字符串可以正常工作。
我已经通过将$config ['charset'] 更改为 ISO-8859-1 并使用php的 utf8_encode() utf8_decode()在插入/检索数据库之前将文本转换为UTF-8来解决了这个问题。 这是最好的方法还是我错过了一些必要的东西,以便在CodeIgniter中使用带有重音字符的UTF-8?
欢迎提供任何建议。

请确保您在所有地方都设置了UTF-8编码。很难确定出错的原因,但可能是由于某些时候您使用了不同的字符集。必读文章:http://www.joelonsoftware.com/articles/Unicode.html。 - Styxxy
1个回答

12

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

在HTML中,添加meta标签:

<meta charset="utf-8" />

保存为 UTF-8 格式。这里有一个在 Notepad++ 中如何操作的指南

定义 MySQL 表格以支持 UTF-8,请使用以下语句创建表格:

DEFAULT CHARSET=utf8;

并将连接设置为:

mysql_set_charset('utf8', $con);

php.ini 中启用 UTF-8:

default_charset = "utf-8"

完整的手动检查请参考在Web应用中处理Unicode从前往后


非常感谢您的答案和链接 - 我会检查确保在整个过程中都使用UTF-8。表单验证问题是由于$config ['charset']设置为'UTF-8'(全大写)而不是'utf-8'(全小写)引起的。由于某种原因,将此设置为默认值为大写字母'UTF-8'并不起作用(至少在我的设置中不起作用)。 - Dan Murfitt
对于在谷歌上找到此问题的人,有一个小注释 - 问题的另一种可能来源是表格或列的编码(是的,更改表格的编码不会更改单个列的编码) - 在这种情况下,使用UTF-8字符串编辑列中的值将导致“不正确的字符串值”警告,而当您仅通过CodeIgniter运行查询时,这是不可见的。您将看到的只是?而不是UTF-8字符。 - MarcinWolny

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接