【问题标题】:CodeIgniter UTF-8 encoding issueCodeIgniter UTF-8 编码问题
【发布时间】:2017-12-22 02:26:29
【问题描述】:

问题

我一直遇到一些我认为是 UTF-8 编码问题的问题,即帖子没有保存到我的数据库中。

当用户从 MS Word 复制和粘贴文本时会出现此问题。似乎有一个特定的字符组合导致了这个问题(我还没有发现任何其他导致相同问题的变体):

  • % b
  • % B

这意味着,当我 var_dump() 我的输入时,我得到:

string(5) "70�ck"

代替:

string(5) "70% back"

编辑:我得到的数据库错误是:

不正确的字符串值:列 [...] 的“\xBAck an...”


我尝试过的

我正在使用 Summernote JS 插件。我尝试了一个不同的插件(WYSIHTML5),但我根本没有尝试过任何插件。我尝试将剪贴板文本粘贴为纯文本。我什至在summernote 上有一个onPaste 回调,它从MS Word 中剥离了所有愚蠢的编码/样式(我认为这是summernote 特定的问题)。

不幸的是,我无法通过搜索“编码问题“% b”及其变体获得任何结果......但我认为上面的字符组合以某种方式被翻译成一个不受支持的字符数据库...

  • 数据库是MySQL 5.7.10,我在所有列上使用utf8_general_ci 排序规则。
  • 我已在 CodeIgniter 中将字符集设置为 UTF-8:$config['charset'] = 'UTF-8';
  • 在 CodeIgniter 的数据库配置中,我指定了 'char_set' => 'uft8', 'dbcollat' => 'utf8_general_ci'
  • 页面的元标记设置为使用 utf-8:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  • 表单具有accept-charset="utf-8" 属性

更新:我也尝试了in this question建议的解决方案


我想我已经完成了所有常见的故障排除,但我有点卡住了。有谁知道为什么这种特定的字符组合会导致问题?也许我错了,这根本不是编码问题?有没有人有其他想法?

【问题讨论】:

标签: php codeigniter utf-8


【解决方案1】:

您应该考虑在前端做更多的事情。尝试在表单上设置编码,因为大多数浏览器应该只将 UTF-8 发送到您的服务器

<form ... accept-charset="UTF-8">
   ...
</form>

详情请见this answer

另外,如果您使用的是编辑器,请查看Quill,它允许从单词中粘贴。

【讨论】:

  • 如前所述,我已经尝试过了。从字面上看,每个字符集配置都已设置为 UTF-8。我现在认为这不是 UTF-8 问题。不过还是谢谢。
猜你喜欢
  • 2010-12-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-12
  • 2011-11-08
  • 2013-09-01
相关资源
最近更新 更多