php 数据库 utf-8,关于php:UTF-8与MySQL数据库中的字符有关的问题(例如éas ??)

博主在尝试从UTF-8编码的MySQL数据库中读取包含特殊字符(如é)的字符串并在PHP页面上显示时遇到问题。尽管数据库、表和字段设置均为UTF-8,且PHP文件也编码为UTF-8,但在使用PHP函数处理字符串时,字符显示异常。经检查,htmlentities转换后出现错误编码。问题可能在于PHP对字符串的处理,而非存储或检索环节。建议使用多字节字符串函数进行处理。
摘要由CSDN通过智能技术生成

我知道关于UTF-8问题有成百上千的问题,但是我尝试了所有可以找到的方法,但都无济于事。

事实:

我正在尝试从MySQL数据库读取包含é的字符串,并将其显示在PHP页面上。实际上,它的确显示为é(但字体不能这样识别,因此使用了另一种默认字体)。当我想使用PHP函数将字符串转换为文件名来替换字符串时,出现了麻烦。 PHP根本不将其识别为é字符。

这是我正在做的事情的简要概述:

1)字符串存储在MySQL数据库中。 MySQL服务器设置为:

MySQL连接排序规则utf8_unicode_ci

MySQL字元集:UTF-8 Unicode(utf8)

数据库本身设置为排序规则utf8_unicode_ci(MyISAM存储引擎,由于共享服务器而无法更改)

实际表设置为collcation utf8_unicode_ci(InnoDB存储引擎)

é在phpMyAdmin中正确显示。数据通过Java程序插入到DB中,但是我也尝试使用手动输入的数据(在phpMyAdmin中输入)进行尝试。

2)未设置PHP default_charset(无值),我在共享服务器上,放置手动替代php.ini似乎不起作用。使用ini_set("default_charset", 'utf-8');可行,但对我遇到的问题没有影响。

3)在运行实际的选择查询之前,我先查询SET NAMES 'utf8'。查询本身无关紧要,但是为了进行测试,我选择了一个简单的SELECT title FROM items WHERE item_id = 1

4)PHP文件本身编码为UTF-8。我已经使用为html设置了正确的字符集

5)为了测试问题,我在返回的字符串(Astérix)上使用了htmlentities,检查将其转换为Astérix的源代码,这当然是不正确的。因此,该字符串在浏览器中显示为Ast??rix。

可能有什么原因呢?对我来说,似乎我将所有可以设置为UTF-8的东西都设置了。

重复的。 搜索一下

我明确表示,我确实在SO上对此进行了研究,但是所提供的解决方案(我在本文中实际上提到的大多数解决方案)都没有帮助。 当您在我发布问题后不到1分钟的时间内无法阅读实际问题时,我只能假设您没有思考就走了"另一个愚蠢的UTF问题DUPE"。 谢谢,非常感谢:/

然后,您没有足够的搜索。 真。

是的,当然一定是这样。 只需检查右边显示的一些"相关"问题即可。 他们甚至都没有提到多字节函数。 他们都假设(通常是正确的)某个地方的存储或检索中断了UTF-8链,而Joe指出的情况并非如此。 而且,我相当确定您在发布无用的注释时不会想到"哦,很明显,请使用多字节函数",否则您只是提到了这一点。

http://php.net/manual/zh-CN/ref.mbstring.php-查看多字节字符串函数。

因此,您说Im在存储和检索数据库中的数据方面没有做错什么,而是Im使用错误的PHP函数来"处理"它吗?

看起来像-就像您说的一样,所有内容都设置为使用UTF-8,除非您将其回显为未将其视为UTF-8。 PHP不会自动检测字符串的字符集(它喜欢ISO-8859-1:P),因此您必须帮忙,因此需要多字节函数。

我只是使用htmlentities的显式htmlentities($string,ENT_COMPAT,"UTF-8")版本进行了检查,它确实证实了您的怀疑。 非常感谢 :)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值