如何在php和mysql数据库中正确进行字符编码
可能重复:如何在php和mysql数据库中正确进行字符编码,php,mysql,character-encoding,phpmyadmin,Php,Mysql,Character Encoding,Phpmyadmin,可能重复: 查找解决方案的上限和下限。在发布这个问题之前,我已经尝试了很多变体 在phpMyAdmin和html页面中显示相同的名称需要什么?这甚至可以实现吗 编辑1:这似乎是mysql的问题。为什么?因为php生成的html页面将始终显示正确的字符。此时,只有数据库显示不正确 编辑2:澄清。使用代码剪贴和下图中显示的原始设置 输入João并提交 数据库中显示的JoÃo 重新加载后的João显示 添加mysqli\u查询($link,'SET NAMES utf8') 输入João并提交 若昂
查找解决方案的上限和下限。在发布这个问题之前,我已经尝试了很多变体 在phpMyAdmin和html页面中显示相同的名称需要什么?这甚至可以实现吗 编辑1:这似乎是mysql的问题。为什么?因为php生成的html页面将始终显示正确的字符。此时,只有数据库显示不正确 编辑2:澄清。使用代码剪贴和下图中显示的原始设置
mysqli\u查询($link,'SET NAMES utf8')
我尝试将列排序规则更改为utf8\u bin、utf8\u general\u ci、utf8\u unicode\u ci,但两边都没有更改。还将文档(BBEdit)从UTF-8更改为UTF-8(带BOM)、ISO拉丁语1和Windows拉丁语1。其中一些钻石制造了更多的黑钻石,使问题更加严重。(在图像中设置为UTF-8)我甚至尝试用编码的等价物替换preg_ã等
简短的故事是,João在页面上输入(上面的内容类型),JoÃo在数据库中,João在刷新时进入html页面
寻找想法。谢谢。确保您的数据库连接也使用UTF-8。试着把下面的行放在你的页面上面
mysql_query("SET NAMES utf8");
默认PHP讨厌UTF8。确保您使用的是函数,而不是通常的内置字符串函数。确保您的html页面以及参与AJAX数据交换的脚本都具有适当的HTTP头,包括
Content-Type: text/html; charset=UTF-8
由于html端编码设置可能会被浏览器忽略,字符集问题通常很难解决。基本上,您需要确保以下所有内容都是正确的:
- 数据库连接使用UTF-8
- DB表使用UTF-8
- DB表中的各个列使用UTF-8
- 数据实际上正确地存储在数据库内部的UTF-8编码中(如果您是从错误的源导入的,或者更改了表或列排序规则,则通常不是这种情况)
- 该网页正在请求UTF-8
- Apache正在提供UTF-8
听起来您的问题特别是您使用了双重编码(或三重编码)字符,可能是因为更改了字符集或导入了具有错误字符集的已编码数据。在上面的教程中有一整节都是关于修复的。也许你需要告诉你的数据库连接,接收的数据是UTF-8格式的。。。这不是自动的我开箱即用。。。您选择了哪种连接方式?mysql(希望不是)、mysqli或pdo?@Pekka Nice。谢谢你指向那个参考资料。@MarkusI。使用mysqli phpMyAdmin报告“连接排序:utf8\U常规\U ci”(也使用utf-8\U unicode\U ci)。这就是您所指的吗?这似乎是一个不需要动脑筋的问题,但请确保您所关注的角色集也已安装并为您的浏览器启用。我至少遇到过一种情况,由于本地配置,一切正常,但显示错误;在建立了你的连接之后…哇,我正在努力。将其包含在db条目脚本中(条目之前),现在:
João
在db中,Jo�o html中的
。运气不好。您在db会话中使用正确的字符集插入和检索的数据会发生什么情况?@symcbean我想您是在为您的帖子上方的anwswer提问。添加查询代码1984建议“扭转”问题。有关摘要,请参见编辑2。不理解您的答复。在您对coder1984回答的第一个评论中,不清楚您从数据库中检索到了什么值—最初插入的值、修改的值或使用正确的连接类型通过php插入的值。脚本没有使用任何字符串函数。事实上,字符串是通过ajax发送到数据库的。然后重新加载页面。这是一个php生成的页面。如果能在你的问题中看到一些代码,那就太好了。Eugene,这里可能有一些东西。请求为:Accept-字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3,响应为:内容类型:text/html;charset=utf-8
老实说,我不确定谁在对谁做什么,这个字符集问题。。。该请求有两套。(?)显示Jo的页面的响应标题是什么�而不是João?好问题。和我在问题上面的回答一样。嗯。。。您以前的记录可能是以错误的编码存储的?你能试着从phpMyAdmin添加一些国际文本以确保它;这是一个纯粹的UTF-8,然后尝试查看HTMLIt将呈现什么。检查AJAX请求/响应的标题也可能会有所帮助。这是一个解决问题的系统方法的好答案。Thx(需要一些时间来消化)是的,这是一组复杂的互锁问题。几个月前,我花了四个小时帮助别人处理这个版本。结果是数据库中的双重编码字符,这在我有限但痛苦的经历中是非常常见的。