2010-01-12 39 views
2

我有一个web应用程序,用于在MySQL数据库中存储法语文本(可能包含重音字符)。当直接通过PHP检索数据时,重音字符变成垃圾。例如:qui r�fl�te la liste.存储在MySQL数据库中的重音字符

因此,我使用htmlentities()(或htmlspecialchars())将字符串转换为html实体,并且一切正常。但是,当我输出包含重音字符和HTML元素的数据时,事情变得更加复杂。例如,<strong>转换为&lt;strong&gt;,因此浏览器无法理解。

我该如何同时获得正确显示重音字符和正确解析我的HTML?

谢谢!

回答

10

也许你可以看看到utf8_encode()utf8_decode()

+0

当我们在我们的SQL数据库中遇到波兰语字符时,我们必须这样做,希望MySQL有类似的地方。 – Daniel 2010-01-12 22:43:13

+0

utf8_encode()做到了。谢谢! – 2010-01-13 01:53:58

+2

-1这可能工作,但它可能无法正常工作,因为你认为它的工作原理,而你没有解决编码问题的根本原因。请阅读[每个程序员都绝对,肯定需要了解编码和字符集以处理文本](http://kunststube.net/encoding/),以了解'utf8_ *'实际执行什么操作以及[处理Unicode前后处理一个Web应用程序](http://kunststube.net/frontback/)如何实际解决问题。 – deceze 2013-02-21 11:31:31

3

您应该使用UTF-8编码存储在数据库中的数据 - 那么一切都应该按预期工作,没有htmlentities()是必需的。

确保所有方面都是utf-8 - 客户端和服务器端的数据库,表编码和排序规则以及连接。即使不是所有东西都是UTF-8,事情也可能会奏效,但是当你做备份恢复时可能会失败,这就是为什么我全面推荐UTF-8的原因。

+0

+1看到这个回答:http://stackoverflow.com/questions/1344692/i-need-help-fixing-broken-utf8-encoding/1348521#1348521查看清单。 – 2010-01-12 22:43:37

+0

@马丁·克莱顿,感谢您的链接。清单上的所有内容都受到尊重......此外,数据以UTF-8格式正确存储在数据库中(即,当我直接查询数据库时,没有奇怪的字符)。有什么想法可能会导致问题? (也可以在HTML显示中硬编码重音字符而不使用html实体) – 2010-01-13 01:48:03

+0

根据OcuS的建议,我使用了utf8_encode(),并且一切正常。无论如何,仍然有趣。谢谢你们的帮助! – 2010-01-13 01:52:27

0

您可以将包含重音字符的数据库字段的排序规则设置为utf8_general_ci来支持它们。

最终,您还可以设置数据库的排序规则,所以默认情况下会设置所有字段。