当我的HTML表单提交到PHP脚本时,为什么特殊字符会混乱?

时间:2011-06-26 06:24:01

标签: php mysql html forms special-characters

基本上,我有一张餐馆老板可以填写的表格(除其他外)要求提供公司名称。

如果输入“FoobarCafé”之类的东西,它将作为“FoobarCafé”存储在MySQL数据库中。它为什么这样做?

HTML页面和数据库表都设置为UTF-8编码(“business_name”字段的排序规则为“utf8_unicode_ci”)。不应该照顾一切吗?究竟是什么原因导致特殊字符"é" (&etilde;)"é"的形式存储在数据库中?这毫无意义。

3 个答案:

答案 0 :(得分:2)

您的数据库连接可能未设置为UTF-8。

在连接开始时,发出以下查询:

SET NAMES 'utf8';

这会将连接字符集设置为utf8,它将匹配表,代码和客户端页面的编码和整理。

答案 1 :(得分:1)

我猜它是从形式而不是mysql,因为电子邮件来自那里。看看那个。也许你有某种“预处理器”。

只是想知道,为什么要在向用户显示该信息时存储html字符?这是灾难的秘诀。 XSS。

快速修复,尝试在打开uft-8的数据上使用htmlentites。发送电子邮件为html,你应该没事。

但是,请尝试找出问题的原因。

修改 的 echo htmlentities($ str,ENT_QUOTES,“UTF-8”);

那应该可以解决你的问题。必须定义utf 8的字符集

答案 2 :(得分:0)

检查相应db表或db的设置,将其设置为utf-8